求教一个关于死锁的问题
#include<stdio.h>int Available[10]; //可用
int Allocation[10][10]; //已分配
int Max[10][10]; //进程最大需求数
int Need[10][10]; //尚需资源
int Request[10][10]; //请求资源
int Work[10]; //工作向量
int Finish[10]; //表示系统是否有足够的资源分配给进程,true为是
int p[10]; //用于存储安全序列
int All[10];
int sum[10];
int i,j; //i表示进程,j表示资源
int n,m; //n为进程i的数量,m为资源j种类数
void chushihua()
{
printf("输入进程数量n:");
scanf("%d",&n);
printf("\n输入资源种类数m:");
scanf("%d",&m);
printf("\n");
for( i=0;i<n;i++) //初始每个进程资源状态为false
p[i]=0;
printf("输入可用资源Available[%d]\n",&m);
for(j=0;j<m;j++)
{
printf(" ");
scanf("%d",&Available[j]);
Work[j]=Available[j];
printf("\n");
}
printf("输入已分配矩阵Allocation[%d][%d]:\n",&n,&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf(" ");
scanf("%d",&Allocation[i][j]);
}
printf("\n");
}
printf("请输入请求矩阵Request[%d][%d]:\n",&n,&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf(" ");
scanf("%d",&Request[i][j]);
printf("\n");
}
}
printf("\n");
for(i=0;i<n;i++){
Finish[i]=1;
for(j=0;j<m;j++)
{
if(Allocation[i][j]>0||Request[i][j]>0)
{
Finish[i]=0;
}
}
}
}
int Compare( int i) //比较Request[i]>Work ,成立则返回false
{
int j,c=0;
for(j=0;j<m;j++)
{
if(Request[i][j]>Work[j])
{ c++; }
}
if(c>0)
return 0;
else if(c==0)
return 1;
}
int Jiance()
{
int i,j,flag=1,K=0;
while(flag==1) //反复判断,直到无法判断
{
flag=0;
for(i=0;i<n;i++) //对任一进程进行判断
{
if(Finish[i]==0&&Compare[i]==1) //if Request<=Work;释放资源
{
for(j=0;j<m;j++) //增加工作向量
{
Work[j]=Work[j]+Allocation[i][j];
}
Finish[i]=1;
p[i]=1; //第i个进程放完资源
flag=1;
break;
}
}
}
//若所有的进程都放完,flag肯定为1
if(flag==0)
{
for(i=0;i<m;i++)
if(Finish[i]==0)
{ K++; }
}
if(K>0) { return 0;}
else if(K==0) { return 1;}
}
void Jiechu() //解除死锁,使用撤销的进程数目最小的方法,死锁进程中占有资源最多的进程撤销
{
int t;
int flag=0;
for(i=0;i<n;i++)
sum[i]=0;
for(i=0;i<n;i++) //统计死锁资源、释放
if(p[i]==0)
{
for(j=0;j<m;j++)
sum[i]=sum[i]+Allocation[i][j];
Allocation[i][j]=0;
}
t=sum[0];
for(i=1;i<n;i++) //找出最大死锁进程i
if(t<sum[i]) { t=sum[i];flag=i;}
printf("撤消占资源最大的进程:%d\n",&flag);
for(j=0;j<m;j++) //回收资源
Work[j]=Work[j]+Allocation[flag][j];
Finish[flag]=1; //完成flag进程的操作
p[flag]=0; //不再对它进行判断
flag=Jiance(); //判断是否已经解除死锁
if(flag==1) {printf("\n成功解除死锁\n");}
else Jiechu();
//如果还没解除,继续放资源
}
void main()
{
printf("死锁检测与解除\n");
chushihua();
int flag;
flag=Jiance(); //检测死锁
if(flag==0)
{
printf("发生死锁,死锁进程如下:\n");
for(int i=0;i<n;i++) //找出死锁进程
if(p[i]==0)
printf("i=%d\n",&i);
Jiechu(); //解除死锁
}
else
{
printf("不会发生死锁!\n");
}
printf("pause");
}
总是提示错误,小白又不太会改,求大神指教!!!