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 - 将值分配给结构数组的分段错误的主要内容,如果未能解决你的问题,请参考以下文章