C语言中队列的链接实现

C语言中队列的链接实现,c,pointers,C,Pointers,我编写了一个函数,用于获取队列中的前端节点并将其删除。详情如下: 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=

我编写了一个函数,用于获取队列中的前端节点并将其删除。详情如下:

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);
}
我从main函数调用它,如下所示:

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指针取消引用或访问错误的内存位置。我能理解为什么。但是,在这里,当我在此行中使用malloc创建QueueNode时:

QueueNode **p=malloc(sizeof(QueueNode));

当我在Serve函数中将其重新分配到q->front时,分配的空间被浪费了。我怎样才能节省这个空间。另外,我只需要一个指向q->front的指针。谢谢

您不需要为p分配内存。它已在函数Append中分配


对不起,我需要一个指向q->front的指针!请创建一个。可能根本不需要malloc,但是如果没有一个自包含的示例,就无法确定是否需要malloc。@BLUEPIXY泄漏了一个QueueNode。无需malloc节点。它应该是QueueNode*p=NULL。@Banex什么是nullptr?您的意思是NULL?队列节点**p=mallocsizeofQueueNode;无论如何,这是错误的。它应该是sizeofQueueNode*或者更好的是sizeof*p。但是,正如我已经说过的,我完全不明白为什么要在这里分配内存。