我在 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);
}
}
从 main 我调用以下命令来创建链表
for(int i = 0; i<TOTAL_CARS; i++) {
head = SetupCars(head);
}
问题是现在我有内存泄漏 - 有没有更好的方法来创建一个固定大小的链表。在程序运行结束时,我可以
free(head);
但是我不能在 SetupCars 方法中调用
free(new_car);
我猜想我可以创建 new_car 作为全局变量并在程序结束时释放它,但我不禁觉得有更好的方法来做到这一点。如果使用得当,我不认为全局变量是邪恶的,但是我会很感激一些建议。