這似乎是一個簡單的問題,也可能是一個簡單的答案,但我正在嘗試從文本檔案中讀取單詞并將每個單詞分配給動態分配的字串陣列:
char** words = calloc(8, sizeof(char*));
(必須以這種方式分配。)
然后我必須根據需要調整陣列的大小。當我嘗試realloc()用于我的陣列時,我的問題就來了。我這樣做:
if(index == MAX-1){ // reallocate if needed
words = (char**) realloc(words, sizeof(*words)*2); MAX*=2;
printf("Re-allocated %lu character pointers.\n", MAX);
}
其中 MAX 是可以存盤在陣列中的最大元素數。
我的陣列填充了正確的值,但是當呼叫 realloc 時,一些字串似乎丟失了!不再填充幾個索引,并且在嘗試列印陣列時出現記憶體錯誤,因為它們以某種方式丟失。
這是我分配字串并將它們存盤在索引中的方式:
words[index] = malloc(strlen(temp) 1);
words[index] = strdup(temp); // copy the word over using strdup
怎么了?
uj5u.com熱心網友回復:
對于初學者,此代碼段
words[index] = malloc(strlen(temp) 1);
words[index] = strdup(temp); // copy the word over using strdup
產生記憶體泄漏。你應該馬上寫
words[index] = strdup(temp); // copy the word over using strdup
這個說法
words = (char**) realloc(words, sizeof(*words)*2); MAX*=2;
只分配兩個型別的指標char *。
你至少應該寫
MAX*=2;
words = (char**) realloc(words, sizeof(*words)*MAX);
if陳述句中的條件也應該是
if(index == MAX){
代替
if(index == MAX-1){
如果您使用的是值,MAX那么為什么要使用幻數8?
char** words = calloc(8, sizeof(char*));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/468819.html
