我是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
的类型。