我的指针有问题。基本上我有一个结构,它作为下面的链表队列工作Pcb
。
struct pcb {
pid_t pid; // system process ID
char * args[MAXARGS]; // program name and args
int arrivaltime;
int remainingcputime;
struct pcb * next; // links for Pcb handlers
int priority, memalloc, res1, res2, res3, res4, status;
};
typedef struct pcb Pcb;
typedef Pcb * PcbPtr;
现在您可以看到我将Pcb
指针定义为PcbPtr
,这意味着它PcbPtr
是一个指针,对吗?
然后我实现了这些函数来添加一个PcbPtr
到队列中,这取决于它的优先级:
PcbPtr enqPcb(PcbPtr headofQ, PcbPtr process){
PcbPtr c = headofQ;
if (!headofQ) {
headofQ = process;
return headofQ;
}
while (c->next) {
c = c->next;
}
c->next = process;
return headofQ;
}
void priEnq(PcbPtr f1, PcbPtr f2, PcbPtr f3, PcbPtr a) {
int pri = a->priority;
if (pri == 3)
enqPcb(f3, a);
else if(pri == 2)
enqPcb(f2, a);
else
enqPcb(f1, a);
return;
}
但它并没有改变我指向的对象(即headf1
在这种情况下:)
PcbPtr headi;
PcbPtr headf1; //priority 1
PcbPtr headf2; //priority 2
PcbPtr headf3; //priority 3
...
priEnq(headf1, headf2, headf3, headi);
所以就好像我正在传递另一个对象作为参数。当我不使用priEnq()
时,它会很好地添加到列表中。
任何想法我做错了什么?任何帮助深表感谢
解决了:
PcbPtr enqPcb(PcbPtr *headofQ, PcbPtr process){
PcbPtr c = *headofQ;
PcbPtr d = c;
if (!*headofQ) {
*headofQ = process;
return *headofQ;
}
while (c->next) {
c = c->next;
}
c->next = process;
return headofQ;
}
void priEnq(PcbPtr *f1, PcbPtr *f2, PcbPtr *f3, PcbPtr a) {
int pri = a->priority;
if (pri == 3)
enqPcb(f3, a);
else if(pri == 2)
enqPcb(f2, a);
else
enqPcb(f1, a);
return;
}
PcbPtr headi;
PcbPtr headf1; //priority 1
PcbPtr headf2; //priority 2
PcbPtr headf3; //priority 3
...
priEnq(&headf1, &headf2, &headf3, headi);