1

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

4

3 に答える 3