在函数中分配结构数组
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
.[=15 的使用有问题=]
这个:
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
return是否为NULL,如果是则处理错误
- 检查
scanf
的 return 值
我想在一个函数中动态分配一个结构数组,然后填充它(在同一个函数中)并在 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
.[=15 的使用有问题=]
这个:
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
return是否为NULL,如果是则处理错误 - 检查
scanf
的 return 值