Как создать и прочитать динамический массив типа данных в C? - PullRequest
2 голосов
/ 18 октября 2019

Я пытаюсь манипулировать динамическим массивом типа с именем 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;
  }

Функция должна копировать массив автомобилей "cars" в новыйдинамический массив «тестирование» и другая функция должны быть в состоянии прочитать данные «тестирования», но я получаю ошибки сегментации при выполнении malloc или при загрузке данных.

1 Ответ

1 голос
/ 18 октября 2019
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);
...