注册 登录
编程论坛 C++教室

关于C++ Access Violation的错误

cytnm 发布于 2013-10-30 22:42, 500 次点击
进程中PCB结构为:
typedef struct pcb{
    struct pcb *next;                             //下一个进程控制块指针
    char process_name[20];                      //进程名
    int process_number;                          //进程编号
    int process_start_moment;                    //进程启动时刻
    int process_need_time;                       //要求运行时间
    int process_time_slice;                       //时间片
    int process_priority;                          //优先数
}PCB;   

         PCB pcb_table[MAX_PROCESS];              //进程控制块表

PCB *pcb_run=NULL;                        //进程运行队列头指针
PCB *pcb_free=NULL;                       //进程空闲队列头指针
PCB *pcb_ready=NULL;                      //进程就绪队列头指针
PCB *pcb_ready_rear=NULL;                 //进程就绪队列尾指针
PCB *pcb_blocked=NULL;                    //阻塞队列头指针
PCB *pcb_blocked_rear=NULL;               //阻塞队列尾指针

 
这是进程调用中的时间片轮转法的算法:
void RR()
{
    printf("请输入设定的时间片大小:");
            int time_slice;
            scanf("%d",time_slice);
            printf("时间片轮转法调度结果如下:\n");

    if(pcb_ready==NULL)
    {
        printf("ready queue is empty,no process to run.\n");
        return;
    }
    else
    {
        pcb_run=pcb_ready;
        if(pcb_ready==pcb_ready_rear)
        {
            pcb_ready=NULL;
            pcb_ready_rear=NULL;
        }
        else
        {
            pcb_ready=pcb_ready->next;
        }
        pcb_run->next=NULL;


        if(pcb_run->process_need_time>time_slice)
        {
            p=pcb_run;
            p->process_need_time=p->process_need_time-time_slice;
            p->next=NULL;
            if(pcb_ready==NULL)
            {
                pcb_ready=p;
                pcb_ready_rear=p;
            }
            else
            {
               pcb_ready_rear->next=p;
               pcb_ready_rear=p;
            }
        }
        else
        {
            pcb_run=NULL;
            pcb_run->next=NULL;
        }
    }
}

调用这个RR函数时就出现了 Access Violation的错误,为什么呀?
0 回复
1