Bonjour,

Apparamment, il y a une petite subtilité avec les pointeurs que je n'ai pas compris, et que j'aimerais bien comprendre. Je dispose d'une liste codée comme suit :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
struct Lst
{
  Node* m_Content;
  struct Lst * m_Next;
} Liste;
J'ai donc un pointeur sur le premier élément (m_First) , que je conserve. Mais j'ai aussi un autre pointeur pointant a peu près n'importe dans la liste : m_Cur;

Réguliérement, je veux libérer le contenu (ie : libérer m_Content) pour un élément sans casser la chaine : m_Content est alors mis à NULL, mais m_Next reste intact, et l'élément précédent continu de pointer ce "noeud vide".
Si je copie m_First, parcours la liste jusqu'à mon élément, et libére, ca marche.
Mais si je fais free(m_Cur->m_Content), deux cas : soit ca plante (alors que je me suis assuré avant que m_Content était non nul...) soit ca marche, mais ca n'a aucun effet sur ma liste ! Comme si m_Cur->m_Content n'était qu'une copie de ce que je veux supprimer, située ailleurs, que cette copie a été bien libérée, mais pas l'original ! Où est la subtilité ?


Et d'une manière générale, quelles sont les causes possibles d'un plantage (genre seg fault) lors d'une instruction free(ptr), PRECEDEE d'un if( !ptr ) (et suivi d'un ptr = NULL ) ?

Merci

Cordialement