LinkedList - Как освободить память, выделенную с помощью malloc

У меня есть очень простой код на C для построения списка Singly Linked, как показано ниже, в котором я выделяю память для каждого узла динамически с помощью malloc. В конце кода я хочу освободить память для каждого выделенного узла, мне было интересно, как это сделать - если я сначала начну с головного узла и освобожу его, указатели на последующие узлы будут потеряны и произойдет утечка памяти.

Другой способ - начать с головного узла и сохранить указатель узла в отдельном массиве указателей или что-то в этом роде, пройти по списку до указателя хвоста, сохраняя указатели узлов, и, достигнув конечного узла, сохранить его также в другой массив указателей и начните освобождение с этого индекса массива в обратном направлении, пока не освободится головной узел.

Это единственный способ добиться того, что я пытаюсь сделать?

Если я не хочу использовать второй буфер, как мне это сделать.

#include "stdio.h"
#include "stdlib.h"

struct lnk_lst 
{
   int val;
   struct lnk_lst * next;
};

typedef struct lnk_lst item;


main()
{
   item * curr, * head;
   int i,desired_value;

   head = NULL;

   for(i=1;i<=10;i++) 
   {
      curr = (item *)malloc(sizeof(item));
      curr->val = i;
      curr->next  = head;
      head = curr;
   }

   curr = head;


   while(curr) {
      printf("%d\n", curr->val);
      curr = curr->next;
   }

  //How to free the memory for the nodes in this list?
   for(i=1;i<=10;i++)
   {
       free()//?? What logic here
   }


}
33
задан goldenmean 11 August 2011 в 11:50
поделиться