我对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;
}
}
答案 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 */