我编写了一个函数Serve
来获取队列中的前节点并将其删除。它如下:
void Serve(QueueNode **p,Queue *q)
{
if(QueueEmpty(q))
Error("Queue is empty!");
else
{
if(q->front==q->rear)
{
*p=q->front;
q->front=q->rear=NULL;
}
else{
*p=(q->front);
q->front=q->front->next;
(*p)->next=NULL;
}
}
}
我从主函数调用它如下:
int main() {
QueueNode **p=malloc(sizeof(QueueNode));
Queue *q=CreateQueue();
Append('a',q);
Append('b',q);
Append('c',q);
Append('d',q);
Serve(p,q);
}
在声明指向指针QueueNode
的同时,如果我将其设置为NULL或保持未初始化,程序会给我NULL指针取消引用或访问错误的内存位置。我明白为什么。但是,在这里,当我在此行中使用QueueNode
创建malloc
时:
QueueNode **p=malloc(sizeof(QueueNode));
当我在q->front
函数中将其重新分配给Serve
时,分配的空间会被浪费掉。我该如何保存这个空间。另外,我只需要一个指向q->front
的指针。谢谢!
答案 0 :(得分:1)
您不需要为p
分配内存。它已经在函数Append()
中分配。
int main() {
QueueNode *p=NULL;
Queue *q=CreateQueue();
Append('a',q);
Append('b',q);
Append('c',q);
Append('d',q);
Serve(&p,q);
}