所以我最近学习了C,我正在遵循一个简单的在线教程,该教程可以创建和打印出链表。我已经一步一步地遵循它,出于某种原因,教程中的家伙能够打印出他的列表,而我没有。这让我发疯了。当我构建和运行(使用 CodeBlocks)时,没有任何内容显示。
他正在使用其他一些文本编辑器,也许是不同的编译器,但我一生都看不出完全相同的代码如何具有两种不同的行为?有人有什么想法吗?代码如下:
struct Node {
int data;
struct Node *next;
};
struct List {
struct Node *head;
};
void pushList(struct List *linkedList, int value) {
if (linkedList->head == NULL) {
struct Node *newNode;
newNode = malloc(sizeof(struct Node));
newNode->data = value;
linkedList->head = newNode;
} else {
struct Node *tNode = linkedList->head;
while (tNode->next != NULL) {
tNode = tNode->next;
}
struct Node *newNode;
newNode = malloc(sizeof(struct Node));
newNode->data = value;
tNode->next = newNode;
}
}
void printList(struct List *linkedList) {
struct Node *tNode = linkedList->head;
while (tNode != NULL) {
printf("This node has a value of %dn", tNode->data);
tNode = tNode->next;
}
}
int main() {
struct List newList = { 0 }; //This initializes to null
pushList(&newList, 200);
pushList(&newList, 300);
pushList(&newList, 400);
pushList(&newList, 500);
printList(&newList);
return 0;
}
你忘了初始化newNode->next = NULL;
. malloc
不会初始化它返回给您的内存块,您对此负责。
如果newNode
指向的内存恰好全为零,你的代码可能会工作,否则,它可能会崩溃,它被称为未定义行为,不同的环境会有不同的行为,这就解释了为什么教程中的家伙和 PaulRooney 得到了预期的行为而你没有。