在函数中分配结构数组

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 值