繁体   English   中英

在功能中分配结构数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM