目前我在下面有下面的代碼。 char **arr
最初設置爲NULL
。然後在從文件讀取時以文字形式存儲。我只是隨機選擇了一個像5000
這樣的大數字,因爲我不知道如何正確地做malloc
業務,即使在網上查找並嘗試學習之後。如何從文件讀取(未知長度)時正確使用malloc和空閒char **?
而且,當我嘗試free
char **arr
(我的代碼的最後一節),有時我得到segmentation faults
,有時abort traps
等。如果有人可以告訴我怎麼做這樣的事情正確,將不勝感激!謝謝!
char **arr = NULL
File *fp = fopen("file.txt", "r")
char string[3000];
char counter = 0;
//to store
while(fscanf(fp, "%s", string)!=EOF){
arr = realloc(arr, 5000); //arbitrarily used a large number like 5000
arr[counter] = malloc(5000);
strcpy(arr[counter++], string);
}
//to free
for(i=0; i<counter; i++){
free(arr[i])
}
free(arr);
可能重複[如何獲取文件的大小在C?](https://stackoverflow.com/questions/238603/how-can-i-get-a-files-size-in-c) –
使用[GCC](http://gcc.gnu.org/)編譯所有警告和調試信息:'gcc -Wall -Wextra -g',然後**使用調試器**'gdb'和[valgrind]( http://valgrind.org/)。另請閱讀[malloc](http://man7.org/linux/man-pages/man3/malloc.3.html)和相關文檔 –
請提供一些[MCVE]的解釋。你的修復我的代碼問題是脫節 –