我有这样的结构:
typedef struct {
int sizes[3];
float **vals[3]; // an array of size 3 of float ** pointers
} mystruct;
我要做的是在一个带有mystruct
指针的函数中设置这些数组值。
void populateStruct(mystruct *s) {
int i, j, n;
for (n = 0; n < 3; n++) {
scanf("%d", &s->sizes[n]);
// Malloc the float pointers (**vals) based on the scanned sizes
s->vals[n] = (float **)malloc(s->sizes[n] * sizeof(float *));
for (i = 0; i < s->sizes[n]; i++)
s->vals[n][i] = (float *)malloc(s->sizes[n] * sizeof(float));
// Populate the float "arrays"
for (i = 0; i < s->sizes[n]; i++) {
for (j = 0; j < s->sizes[n]; j++) {
scanf("%f", &s->vals[n][i][j]);
}
}
}
}
以下是我在main
中使用该功能的方法:
int main() {
mystruct *s1;
populateStructure(s1);
return 0;
}
这段代码编译得很好,但是当我运行它时会出现seg错误。 C不是我的强项,所以我不太清楚我做错了什么。
答案 0 :(得分:1)
你是如何宣布自己的结构以及如何传递它?
在你调用populateStruct的函数中,你应该声明s:
为mystruct s and call populateStruct(&s)
或
mystruct *s;
s = malloc(sizeof(mystruct));
populateStruct(s);
答案 1 :(得分:1)
mystruct *s1;
s1只是一个具有不可预测值的指针。您没有为所需的结构分配内存。 取消引用一个狂野(未初始化)指针会导致segv。 您可以将代码修改为:
mystruct s1;
populateStructure(&s1);
或
mystruct *s1 = (mystruct *)malloc(sizeof(mystruct));
populateStructure(s1);
(别忘了在第二个中释放s1)