2017-05-27 35 views
0

因此,我正在將文件中的所有單詞讀入鏈表中。我有一個單獨的鏈表,每個字母的單個字母。嘗試將新節點插入鏈表時程序崩潰。爲什麼?

這裏的結構:

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; 
} 

我看不出我在做什麼錯她,但程序崩潰,只要我運行它。我是否想要到達我不想接觸的地方?

+0

「字典」是否已初始化?元素是否都是「NULL」?而如果輸入不是小寫字母呢? –

+0

順便說一句,如果'node'不是'NULL',那麼你有無限遞歸。 –

+0

在這種情況下它們都是小寫字母。字典是否需要初始化?無論如何,我希望它的所有元素在開始時都是空的。我寧願在函數內初始化它們。 –

回答

2

首先struct WORD* dictionary[26];這可以用垃圾來初始化,你應該設置26個指針爲NULL,也

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

這一點,如果節點!= NULL,然後你再一次把它傳遞給insertWord功能此執行,那麼再次節點!= NULL,你再次啓動這個函數......,它是無限遞歸。

還記得大寫字母。

+0

謝謝!有效。愚蠢的我,我應該發送node-> next作爲參數。 –

相關問題