谁帮我看下这个C程序,这个程序时而可以运行时而不可以

来源:百度知道 编辑:UC知道 时间:2024/05/18 05:29:47
我在写操作系统的进程调度,按照时间片算法。
这个程序时而运行不出错,时而出错,这是怎么回事啊,很困惑。求人解答下,愿意的大哥留下邮箱。
这两个函数第一个是用来显示队列的,第二个是用来按到达时间排序的。没有什么问题的。

经我测试,如果在使用p之前判断其非NULL,程序运行无误。

void Display(LinkQueue &Q,int n)
{
QueuePtr p;
p=Q.front->next;
cout<<"===========================各进程具体属性清单============================="<<endl;
cout<<"进程名"<<" "<<"到达时间"<<" "<<"运行时间"<<" "<<"状态"<<endl;
for(int i=0;i<n;i++)
{
// 使用指针前需要判断其非空,因为p值处于不断变化中
while (p)
{
if(p->runtime<=0)
{
p->condition='C';
}
cout<<p->name<<" "<<p->time<<" "<<p->runtime<<" "<<p->condition<<endl;
p=p->next;
}
}
}

// 这个函数绝对有问题,在指针交换的过程中,尾节点可能向前移,而rear指针并没有进行调整。
void TimeOrder(LinkQueue &Q,int n)
{
QueuePtr r,p,q;
for(int i=0;i<n;i++)
{//起泡法<