首页 > 解决方案 > 如何在 C 中创建和读取数据类型的动态数组?

问题描述

我正在尝试操作名为 car 的类型的动态数组,但我不断收到“分段错误”或“不兼容类型”错误。

我已经尝试了 '*' 和 '&' 的所有组合,但似乎没有任何效果。

结构类型定义为:

struct car{
  unsigned int id;
  char *name;
};

然后在 main.c 中创建它:

struct car *testing;

我正在尝试使用另一个名为 void init_cars 的文件中的函数从先前创建的数组(汽车)中引入数据:

void init_cars(struct car *array[]){
  int i;
  array = malloc (SIZE * sizeof(struct car));
  for(i=0; i<SIZE;i++){
    array[i]->id=cars[i].id;
    array[i]->name=cars[i].name;
  }

该函数应该将汽车数组“汽车”复制到新的动态数组“测试”,另一个函数应该能够读取“测试”的数据,但是在执行 malloc 或加载数据时出现分段错误。

标签: carraysstructmalloc

解决方案


void init_cars(struct car **array){
  int i;
  *array = malloc (SIZE * sizeof(struct car));
  for(i=0; i<SIZE;i++){
    (*array)[i].id=cars[i].id;
    (*array)[i].name=cars[i].name;
  }

由于您正在传递struct car **,因此您需要在分配时取消引用它两次。

main您可以拨打以下电话。

struct car *testing;
init_cars(&testing);

推荐阅读