使用 CodeBlock 在 C 中打印链表



所以我最近学习了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 得到了预期的行为而你没有。

相关内容

  • 没有找到相关文章

最新更新