c - 结构数组的动态分配

标签 c arrays segmentation-fault malloc struct

我已经在 stackoverflow 上无数次找到关于其他人问题的有用答案,但这是我第一次提出自己的问题。

我有一个 C 函数,它需要动态地为结构数组分配空间,然后用从文件中提取的值填充每个数组元素的结构成员。成员分配在循环的第一遍工作正常,但在第二遍时出现段错误。

我已经编写了这个快速程序来说明我遇到的问题的本质:

#include <stdlib.h>
#include <stdio.h>

typedef struct {
        int a;
        int b;
} myStruct;

void getData(int* count, myStruct** data) {
    *count = 5;
    *data = malloc(*count * sizeof(myStruct));

    int i;
    for (i = 0; i < *count; i++) {
        data[i]->a = i;
        data[i]->b = i * 2;
        printf("%d.a: %d\n", i, data[i]->a);
        printf("%d.b: %d\n", i, data[i]->b);
    }
}

int main() {
    int count;
    myStruct* data;
    getData(&count, &data);
    return 0;
}

我从这里得到的输出是:

0.a: 0
0.b: 0
Segmentation fault

我不确定我的问题出在哪里。似乎 malloc 调用只为一个结构分配了足够的空间,而它应该为五个结构分配空间。

非常感谢任何帮助。

最佳答案

错误在这里:

for (i = 0; i < *count; i++) {
    data[i]->a = i;
    data[i]->b = i * 2;
    printf("%d.a: %d\n", i, data[i]->a);
    printf("%d.b: %d\n", i, data[i]->b);
}

你应该这样做:

for (i = 0; i < *count; i++) {
    (*data)[i].a = i;
    (*data)[i].b = i * 2;
    printf("%d.a: %d\n", i, (*data)[i].a);
    printf("%d.b: %d\n", i, (*data)[i].b);
}

原因是您索引了错误的data“维度”。

关于c - 结构数组的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7864547/

相关文章:

java - 二维数组 : Magic Square

c++ - 仅由非常大的随机输入引起的分段故障核心在出队前转储到 pqueue 堆中

c - 在 C 中生成随机数组时出现段错误和未初始化的数据

c - 如果数据包未发送到其他终端系统,则等待发送? C发送()

javascript - 通过 ReactJS 访问 JSON 中的数组

c - 如何展示更好的平均水平?

javascript - 放入后数组元素丢失 .innerHTML = ""

c - 为什么我的链表代码在删除头节点时会产生段错误?

c - C 中的字符串复制错误

c++ - 静态初始化不使用 _initterm 而是使用 _Init_thread_header()/footer()