将值移动到C中的队列末尾

时间:2014-02-05 22:28:36

标签: c linked-list queue

我对C很新,我正在尝试使用此函数将值移动到队列的末尾。它在前两次工作,但第三次关于while循环出错了,我不确定是什么导致它。任何帮助都将不胜感激。 :)

void enqueue(queue q, int value)
{
    if (q == NULL)
    {
        return;
    }

    // Create new node
    node * newNode = (node *)malloc(sizeof(node));

    if (newNode == NULL)
    {
        return;
    }

    // Add node to end of queue
    newNode->value = value;

    if (q->head == NULL)
    {
        newNode->next = q->head;
        q->head = newNode;
    }
    else
    {
        node * head = q->head;

        while (head->next != NULL)
        {
            head = head->next;
        }

        // Update queue pointer
        head->next = newNode;
    }
}

1 个答案:

答案 0 :(得分:1)

如果q->head非NULL,则永远不会设置newNode->next,使其保持未初始化状态。行走列表的下一个代码将遵循这个未初始化的指针,导致未定义的行为并可能发生崩溃。

要解决此问题,您只需初始化newNode->next

即可
newNode->value = value;
newNode->next = NULL;
if (q->head == NULL)
{
    q->head = newNode;
}
else
    /* your code as before */