动态分配结构数组

Dav*_*lke 6 c arrays malloc struct segmentation-fault

我已经在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;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

0.a: 0
0.b: 0
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

我不确定我的问题在哪里.似乎malloc调用只为一个struct分配足够的空间,而它应该为5分配空间.

任何帮助将非常感谢.

Mys*_*ial 6

错误在这里:

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);
}
Run Code Online (Sandbox Code Playgroud)

你应该做这个:

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);
}
Run Code Online (Sandbox Code Playgroud)

原因是你正在索引错误的"维度" data.