[英]Allocating array of structures in function
我想在函数中动态分配结构数组,然后将其填充(在同一函数中)并在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
用法有问题。
这个:
scanf("%d", &data[i]->x);
应该:
scanf("%d", &(*data)[i].x);
您需要取消引用data
以获得指向第一个元素的指针,然后索引到该数组中并获取字段的地址。 如果将*data
保留为函数内的单独变量,则将更加简单。
分配看起来正确。 您还应该添加代码以在依赖于它之前检查scanf()
确实成功。
问题不是由于malloc
,而是因为&data[i]->x
。
这需要更改为&(*data)[i]->x
。 您必须访问value at (or more sophisticated: dereference)
数据中的值。
另外,还需要一些改进:
malloc
返回NULL,如果是这种情况,则处理错误 scanf
返回值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.