我想在一个函数中动态分配一个结构数组,然后填充它(在同一个函数中)并在main中打印它。
typedef struct{
int x;
}str;
void fc(str **data, int length){
*data = malloc(length*sizeof(str));
for(int i=0; i<length;i++){
scanf("%d", &data[i]->x);
}
}
int main(){
str *data;
int length=5;
fc(&data, length);
for(int i=0; i<length;i++){
printf("%d", data[i].x);
}
}
Scanf()
适用于data[0]
,但对于data[>=1]
,它会停止工作,因此我认为使用malloc
时出现了问题。
答案 0 :(得分:0)
此:
scanf("%d", &data[i]->x);
应该是:
scanf("%d", &(*data)[i].x);
您需要取消引用data
以获取指向第一个元素的指针,然后索引到该数组并获取该字段的地址。如果你将*data
保留为函数内的单独变量,那会更简单。
分配看起来正确。您还应该添加代码以在依赖它之前检查scanf()
是否真的成功。
答案 1 :(得分:0)
问题不在于malloc
,而是因为&data[i]->x
。
这需要更改为&(*data)[i]->x
。您必须访问value at (or more sophisticated: dereference)
数据。
此外,还需要一些改进:
malloc
是否返回NULL,如果是这样,则处理错误scanf