LinkedList - Comment libérer la mémoire allouée avec malloc

J'ai une question très simple en code C pour la construction d'une seule liste Liée comme ci-dessous, dans laquelle j'alloue de la mémoire pour chaque nœud de façon dynamique à l'aide de malloc. À la fin de code, je veux libérer la mémoire pour chaque nœud affecté, je me demandais comment aller à ce sujet - Si je commence à partir de la tête de nœud d'abord et de les libérer, les pointeurs vers les autres nœuds sont perdus et une fuite de mémoire se produit.

Autre façon est de commencer à partir de la tête de nœud et de conserver le nœud pointeur dans un autre tableau de pointeurs ou de quelque chose, la traversée de la liste jusqu'à la queue pointeur tout en stockant le nœud de pointeurs, et dès qu'il aura atteint la queue du nœud, les stocker aussi à l'autre tableau de pointeurs et de commencer à libérer du tableau de l'index vers l'arrière jusqu'à ce que le nœud de tête est gratuit ed.

Est que la seule façon de réaliser ce que je suis en train de faire?

Dans le cas où si je ne veux pas utiliser de tampon, comment dois-je faire.

#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
   }


}
InformationsquelleAutor goldenmean | 2011-08-11