У вас есть две альтернативы, каждая из которых включает динамическое распределение памяти. Большая разница в структуре , которую вы выделяете динамически.
Первая альтернатива использует указатель вместо массива:
typedef struct{
int ammount;
Passanger *bus_array;
} Bus;
Как только вы узнаете значение amount
, вы можете выделить память для bus_array
:
Bus my_bus;
bus.amount = get_passenger_amount();
bus.bus_array = malloc(bus.amount * sizeof(Passanger));
Второй вариант - использование гибкого элемента массива (как я уже упоминал в комментарии):
typedef struct{
int ammount;
Passanger bus_array[];
} Bus;
Тогда вам нужно динамически распределить структуру Bus
:
int amount = get_passenger_amount();
Bus *my_bus = malloc(sizeof(Bus) + amount * sizeof(Passanger));
my_bus->amount = amount;
Существуют некоторые различия между двумя методами, которые стоит отметить. Наиболее важным является то, что первый метод выполняет два отдельных и отдельных распределения: одно для структуры Bus
и другое для bus_array
. Во втором методе существует только одно объединенное распределение для всей структуры Bus
, а также bus_array
.