所以這是一個非常簡單的程序來創建和顯示鏈表。在這裏,我陷入了顯示循環中,並且在屏幕上看到了無限的「2-> 2-> 2 - > ...」。調試C鏈接列表程序陷入無限循環
調試後,我可以看到我的程序總是進入if
語句insertNode()
,而它應該只在那裏一次,即當鏈表被初始化時。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node * next;
};
struct node * head = NULL;
struct node * curr = NULL;
void insertNode(struct node * temp2) {
if (head == NULL) {
head = temp2;
head->next = NULL;
}
else {
temp2->next = head;
head = temp2;
}
}
void display() {
curr = head;
while (curr->next != NULL)
{
printf("%d->",curr->data);
curr = curr->next;
}
}
void main() {
struct node * temp = (struct node *) malloc (sizeof(struct node));
temp->data = 5;
insertNode(temp);
temp->data = 6;
insertNode(temp);
temp->data = 1;
insertNode(temp);
temp->data = 2;
insertNode(temp);
display();
}
如果您在顯示屏內移動'curr',而不是污染全球區域,那麼如果您僅在該區域內使用它,則會更好。儘量避免使用全局變量。 –
也會檢查'display',這樣'head'在取消引用前真正指向某個東西。 –