2017-08-06 129 views
-1

修復的條件錯誤於是我宣佈一個字符串數組作爲 typedef char String[11];和我的主要功能我有這個條件 `如何從一個字符串數組

char word[12]; 
String hashArray[SIZE]; 

if (insertword(word, hashArray) == 1) 
    printf("word %s successfully inserted.\n", word); 

這是它調用函數。

int insertword(char word[], String hashArray[]) 
{ 

    //get the hash 
    int hashIndex = hashfunction1(word)% 7 ; 
    printf("INDEX:%d\n", hashIndex); //delete later 

    if (hashArray[hashIndex] == NULL) //ERROR IS HERE 
    { 
     strcpy(hashArray[hashIndex], word); 
     printf("INSERTED!! "); 
     return 1; 
    } 
    else 
    { 
     printf("NOT INSERTED!! "); 
     return 0; 
    } 
} 

我已經通過添加打印測試了我的程序,顯然錯誤發生在第一個條件語句。 else部分總是被執行。我絕對錯過了一些東西,任何幫助將不勝感激。

+0

'hashIndex'要求*小於*'SIZE'嗎?否則***未定義的行爲***結果。並且'SIZE'總是大於'strlen(word)+ 1;'(如果不在'strcpy(hashArray [hashIndex],word)中,結果相同;'如果'hashArray [hashIndex]'沒有提供至少'strlen (word)+ 1;'chars of storage。)所有'hashArray [hashIndex]'元素初始化爲'NULL'?如果是這樣,你沒有存儲'strcpy(hashArray [hashIndex],word);'因爲'hashArray [hashIndex]'是***未初始化/未分配***指針。 –

+0

請參閱:[**如何創建最小,完整和可驗證的示例**](http://stackoverflow.com/help/mcve)。 –

+0

我有一個文本文件中的32個字符串,我確保爲每個單詞分配足夠的空間。我認爲問題根源於未初始化的陣列。然而我還沒有分配任何東西給數組呢..我應該設置爲空元素?我有一種感覺,從我宣佈它的那一刻起,它應該已經是空的了。 – Erail

回答

1

與您的代碼的問題:

char word[12]; 
String hashArray[SIZE]; 

word沒有初始化,因此它具有垃圾值。
然後內部insertword功能:

int hashIndex = hashfunction1(word)% 7; 

陣列 「衰變」 到的指針的第一個元素:

hashfunction1(word)%7; 

是一樣:

hashfunction1(word[0])%7; 

再次當, word未初始化,所以該值將被放入hashIndex i不知道!
然後,您正在訪問該索引中未知的陣列hashArray[hashIndex],可能超出邊界。

在邊界外訪問數組有「未定義的行爲」。


要解決這個問題,你需要把一些隨機值word陣列,這將是小於,如您的評論,size = 32說。

相關問題