在功能中分配结构数组

时间:2018-04-16 12:49:57

标签: c pointers allocation

我想在一个函数中动态分配一个结构数组,然后填充它(在同一个函数中)并在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时出现了问题。

2 个答案:

答案 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
  • 的返回值