Bonjour.
Si je traduis la correction de ton exercice en langage C, ça donne quelque chose dans ce genre là :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| struct Cellule
{
int m_element; // par exemple
struct Cellule* m_suivante;
};
typedef struct Cellule Cellule;
typedef Cellule* Liste; // une liste vide est un pointeur nul
// une liste non vide est un pointeur vers la 1re cellule
void Liste_Suppr(Liste* liste)
{
assert(liste != NULL); // petite sécurité
if(*liste != NULL) { // si la liste est non vide
Liste_Suppr(&((**liste).m_suivante)); // supprimer les éventuelles cellules à partir de la 2e
free(*liste); // libérer la mémoire de la 1re cellule
*liste = NULL; // ne plus pointer sur l'espace qu'occupait la 1re cellule
}
} |
Dans le code, la ligne
*liste = NULL; // ne plus pointer sur l'espace qu'occupait la 1re cellule
n'est utile que pour la première cellule, donc pour la première itération de l'algo.
Sans cette ligne, à la fin, au lieu que (*liste) soit un pointeur nul, ce serait un pointeur invalide, plus précisément un pointeur vers l'espace mémoire qu'occupait la première cellule avant que celui-ci ne soit libéré.
Je ne connais pas tes prérequis en C, donc je ne sais pas si j'ai été clair.
Partager