尝试将新节点插入链接列表时程序崩溃。为什么?

时间:2017-05-27 10:23:28

标签: c pointers linked-list structure

所以我正在将文件中的所有单词读到一个链表列表中。我为字母表中的每一个字母都有一个单独的链表。

这是结构:

struct WORD {
    char* word;
    int noOfUse;
    struct WORD* next;
};

阵列:

struct WORD* dictionary[26];

循环阅读所有单词:

do {
    fscanf(fp, "%s", buffer);
    printf("%s\n", buffer);
    dictionary[buffer[0]-'a'] = insertWord(buffer, dictionary[buffer[0]-'a']);
} while (!feof(fp));

功能:

struct WORD* insertWord (char buffer[30], struct WORD* node){
if (node == NULL){
    node = (struct WORD*) malloc (sizeof(struct WORD));
    node->word = (char*) malloc (strlen(buffer)+1);
    strcpy(node->word, buffer);
    node->next = NULL;
}
else {
    node->next = insertWord(buffer, node->next);
}
return node;
}

我无法看到我做错了什么,但程序一旦运行就崩溃了。我想到达一个我不想到达的地方吗?

1 个答案:

答案 0 :(得分:2)

首先struct WORD* dictionary[26];这可以用垃圾初始化,你应该设置26个指向NULL的指针,

else {
  node->next = insertWord(buffer, node);
}

这将执行if node!= NULL然后再次将它传递给insertWord函数,然后再次传递node!= NULL并再次启动此函数...,它是无限递归。< / p>

还要记住大写字母。