问题遇到的现象和发生背景
C++的指针相互赋值,为什么一个指针给另一个指针赋值后就不能再给别的指针赋值了
用代码块功能插入代码,请勿粘贴截图
typedef struct PCBNode
{
int ID;
int Priority;
int CPUtime;
int Alltime;
int Arrivetime;
int state;
int counter;
struct PCBNode *next;
}PCB;
PCB *CreatPCB(int n)
{
int i;
PCB *p,*q;
head=(PCB*)malloc(sizeof(PCB));
head->next=NULL;
p=head;
p->Alltime=0;
p->state=0;
for(i=1;i<=n;i++)
{
if(i==1)
head->next=p;
q=(PCB*)malloc(sizeof(PCB));
q->ID=i;
q->CPUtime=0;
q->Alltime=rand()%200;
q->Arrivetime=rand()%100;
q->Priority=rand()%10;
q->state=0;
p->next=q;
q->next=NULL;
p=q;
}
return head;
}//创建pcb块
int main(){
int i,n,z=0;
scanf("%d",&n);
PCB *oldd[4][n];
head=CreatPCB(n);
for(z;z<n;z++)
{
oldd[1][z]=(PCB*)malloc(sizeof(PCB));
if(z==0)
*oldd[1][z]=*head->next;
else
{
*oldd[1][z]=*oldd[1][z-1]->next;
oldd[1][z-1]->next=oldd[1][z];
}
printf("\n%d,%d\n",1,z);
}
Display(head);
for(z;z<n;z++)
{
oldd[2][z]=(PCB*)malloc(sizeof(PCB));
if(z==0)
*oldd[2][z]=*head->next;
else
{
*oldd[2][z]=*oldd[2][z-1]->next;
oldd[2][z-1]->next=oldd[2][z];
}
printf("\n%d,%d\n",2,z);
}
Display(head);
}
运行结果及报错内容
当head指向create函数的返回值时可以正常display,把head->next指向oldd[1][0]时也可以正常display,但是把head->next指向oldd[2][0]及之后的就不行了
我想要达到的结果
这是模拟操作系统的进程调度算法的其中一部分,我希望可以用一个二维数组odll[4][N]的每一行来将create(N)函数产生的结果复制一遍存到不同的地方,然后再使用四种不同的进程调度算法对每一行进行操作,来比较四种算法的优越性,但是用我的代码复制一次后就不能复制第二次了