在使用(char**)malloc()分配内存时出现分段错误(core dump)



我是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", ingredients[i]);
}
fclose(in);
return ingredients;
} 

分割错误似乎发生在我声明成分时…我做错了什么

您没有为指针数组分配足够的内存:

ingredients = (char**)malloc(numIngredients*sizeof(char));

相反,您为大小为sizeof(char)numIngredients元素分配空间。这会导致您占用已分配的内存,从而触发未定义的行为。

乘以char *的大小,因此:

ingredients = malloc(numIngredients*sizeof(char *));

或者更好:

ingredients = malloc(numIngredients*sizeof(*ingredients));

因为它不依赖于ingredients的类型。

相关内容

  • 没有找到相关文章