结构数组的动态分配



我已经在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: %dn", i, data[i]->a);
        printf("%d.b: %dn", 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: %dn", i, data[i]->a);
    printf("%d.b: %dn", i, data[i]->b);
}

你应该这样做:

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

原因是你索引了data的错误"维度"。

相关内容

  • 没有找到相关文章

最新更新