我是C語言的新手,目前正在學習如何動態分配記憶體。目前,我正試圖創建一個動態分配的字符陣列,其中每個單獨的字串的記憶體也是動態分配的。每個字串都是從一個txt檔案中的一行檢索出來的(numIngredients = 行數 | MAX_ING = 每行/成分的最大字符數)。
char** readIngredients(int numIngredients){
FILE *in;
in = fopen("input.txt", "r") 。
char** ingredients;
ingredients = (char**)malloc(numIngredients*sizeof(char) )。)
for(int i=0; i<numIngredients; i ){
ingredients[i] = (char*)malloc(MAX_ING*sizeof(char) )。)
}
for(int i=0; i<numIngredients; i ){
fscanf(in, "%s"/span>, ingredients[i])。
}
fclose(in)。
return ingredients;
}
分段故障似乎就發生在我宣告配料的時候......我做錯了什么
uj5u.com熱心網友回復:你沒有為一個指標陣列分配足夠的記憶體:
你沒有為一個指標陣列分配足夠的記憶體。
ingredients = (char**)malloc(numIngredients*sizeof(char) )。)
相反,你為numIngredients元素分配了大小為sizeof(char)的空間。 這將導致您超出分配的記憶體,觸發未定義的行為。
乘以所分配的記憶體,就會觸發未定義的行為。
用 或者更好: 因為它不依賴于
標籤: 上一篇:將字符和整數的加法列印成浮點數
char *的大小來代替,所以:ingredients = malloc(numIngredients*sizeof(char *) 。)
ingredients = malloc(numIngredients*sizeof(*ingredients)) 。
ingredients的型別。
