C - 将值分配给结构数组的分段错误

Posted

技术标签:

【中文标题】C - 将值分配给结构数组的分段错误【英文标题】:C - Segmentation Fault Assigning value to Array of Struct 【发布时间】:2021-06-24 09:49:11 【问题描述】:

每当我这样做时,我都会遇到分段错误。我想知道是否有一种方法可以让我为结构分配值而不会出现 SegFault?

typedef struct _chunk

  int lo;       // lower bound
  int hi;       // higher bound
 chunk;

chunk_stack = (chunk **)malloc(10 * 10 * sizeof(chunk **));

for (i = 0; i < chunk_per_thread; i++)

   chunk_stack[myid][i].lo = 0;
   chunk_stack[myid][i].hi = 1;

【问题讨论】:

您为第一个维度分配内存,但不为第二个维度分配内存。也做chunk_stack[myid] = malloc(...); 这能回答你的问题吗? Correctly allocating multi-dimensional arrays 【参考方案1】:

假设您需要分配一个大小为 r * c 的二维数组。您需要首先为您所做的双指针分配内存,但其中有一个错误,即 malloc 函数内有一个额外的 *。

chunk **chunk_stack = (chunk **)malloc(r * sizeof(chunk *));

那么你需要为每一行分别分配内存。

for(int i = 0; i < r; i++)
    chunk_stack[i] = (chunk*)malloc(c * sizeof(chunk));

【讨论】:

正确但不建议在 C 中强制转换指针。请参阅:***.com/a/17260868/3808573。最好写chunk **chunk_stack = malloc(r * sizeof(chunk *));chunk_stack[i] = malloc(c * sizeof(chunk)); @ssd 谢谢。我不知道。

以上是关于C - 将值分配给结构数组的分段错误的主要内容,如果未能解决你的问题,请参考以下文章

由于 C 中的内存不足导致的分段错误

C - 指向结构指针的指针 - 分段错误

是什么导致c代码中的分段错误,跨函数的动态分配

尝试将用户输入分配给结构中的元素但不断收到分段错误 11

C ++ 11分段错误试图将数组(<算法>)动态复制到向量中

“错误:分配给带有数组类型错误的表达式”当我分配结构字段时(C)