尝试使用 (char**)malloc() 分配内存时出现分段错误(核心转储)

身份证号

我是 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));

相反,您numIngredients为 size 的元素分配空间sizeof(char)这会导致您超出分配的内存触发未定义的行为

乘以 a 的大小char *,所以:

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

或者甚至更好:

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

因为它不依赖于ingredients.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用结构中的指针(成员)在动态内存分配中出现分段错误(核心转储)

在分配了new []的阵列上使用avx时出现分段错误(核心转储)

使用 apt 升级时出现分段错误(核心转储)

尝试从数组复制时出现分段错误(核心转储)错误

尝试使用 strcpy 时出现核心转储错误

使用ctypes传递2d numpy数组时出现分段错误(核心转储)

使用 pthread_create 时出现“分段错误(核心转储)”

使用ffmpeg并指定开始时间时出现分段错误(核心转储)

在C中使用getchar()时出现分段错误(核心转储)?

C 中的分段错误(核心转储) - 使用 PTHREADS 时

使用 fscanf 时 C 中的分段错误(核心转储)

当图像来自 Pillow 时,尝试将 Qpixmap 设置为 Qlabel 时出现“分段错误(核心转储)”

尝试启动 Spotify 时出现核心转储错误

尝试将浮点数读入 C++ 中的链表时出现分段错误(核心转储)

使用2d数组时,为什么我的程序中出现分段错误(核心转储)错误?

使用getline时出现分段错误(核心已转储)

使用动态2D数组时的C ++分段错误(核心转储)

使用C从核心转储获取导致分段错误的地址

使用结构和指针的分段错误(核心转储)

基本指针使用:分段错误,核心转储

使用cv_bridge(ROS indigo)和OpenCV 3时出现分段错误(核心已转储)

在bash shell中使用scp时出现分段错误(核心已转储)

使用 LWJGL3 生成顶点数组时出现核心转储错误

当我在动态数组输入函数中使用realloc时,出现了段错误(核心转储)

当我尝试释放由malloc分配的char指针时,为什么会出现核心转储?

x86组件:尝试反转打印阵列时出现分段错误(核心已转储)

使用openmp的分段故障(核心转储)

使用VisualVm分析堆转储时出现内存不足错误

我得到一个分段错误尝试的节点添加到链表在C结束时(核心转储)错误++