我已经在 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/