必要に応じて変更されるデータを格納するために使用される 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 をグローバル変数として作成し、プログラムの最後に解放することもできますが、もっと良い方法があると感じずにはいられません。適切に使用すればグローバル変数が悪だとは思いませんが、アドバイスをいただければ幸いです。