m0_73950141 2022-11-11 10:34 采纳率: 0%
浏览 6

c++进程调度算法指针赋值问题

问题遇到的现象和发生背景

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);
}
运行结果及报错内容

img

当head指向create函数的返回值时可以正常display,把head->next指向oldd[1][0]时也可以正常display,但是把head->next指向oldd[2][0]及之后的就不行了

我想要达到的结果

这是模拟操作系统的进程调度算法的其中一部分,我希望可以用一个二维数组odll[4][N]的每一行来将create(N)函数产生的结果复制一遍存到不同的地方,然后再使用四种不同的进程调度算法对每一行进行操作,来比较四种算法的优越性,但是用我的代码复制一次后就不能复制第二次了

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-11 12:32
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 11月11日

悬赏问题

  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 如何解决调试dev-出++5.11不成功问题
  • ¥15 安装CentOS6时卡住
  • ¥20 关于#监控系统#的问题,如何解决?(相关搜索:系统软件)
  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理