Я создал связанный список в C, который используется для хранения данных, которые затем изменяются по мере необходимости. При создании связанного списка я использовал следующиеСоздать фиксированный размер Связанный список в C
struct car_elements
{
char car_rego[7];
double time_parked;
struct car_elements *next;
};
typedef struct car_elements car;
/* Defined as global variable to hold linked list */
car *head = NULL;
car *SetupCars()
{
car *ptr = head;
car *new_car = NULL;
new_car = (car*) malloc(sizeof(car));
if (!new_car)
{
printf("\nUnable to allocate memory!\n");
exit(1);
}
strcpy(new_car->car_rego, "empty");
new_car->time_parked = time(NULL);
new_car->next = NULL;
if (ptr == NULL)
{
return (new_car);
}
else
{
while (ptr->next)
{
ptr = ptr->next;
}
ptr->next = new_car;
return (head);
}
}
Из основного я называю следующее для создания связного списка
for(int i = 0; i<TOTAL_CARS; i++) {
head = SetupCars(head);
}
Проблема заключается в том, что теперь у меня есть утечка памяти - Есть ли лучше способ создания связанного списка с фиксированным размером. В конце выполнения программы я могу
free(head);
Однако я не могу назвать в методе SetupCars
free(new_car);
я мог бы создать new_car как глобальную переменную я думаю, и освободить его в конце программы, но Я не могу не чувствовать, что есть лучший способ сделать это. Я не думаю, что глобальные переменные являются злыми, если их использовать правильно, но я был бы признателен за некоторые советы.
Прежде всего - использование VALGRIND с: VALGRIND --leak-проверки = полная --track-истоках = да ... – mousomer
Если вы хотите получить список с фиксированным размером почему бы не использовать массив? – Joni