关于C++ Access Violation的错误
进程中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的错误,为什么呀?