salut
si on veux liberer un liste chainee est ce qu'on a seulement à faire un free au niveau du sommet ou bien de liberer chaque noeud à part et pourquoi la premiere proposition ne marche pas...![]()
merci![]()
salut
si on veux liberer un liste chainee est ce qu'on a seulement à faire un free au niveau du sommet ou bien de liberer chaque noeud à part et pourquoi la premiere proposition ne marche pas...![]()
merci![]()
En répondant au deux questions à la fois:Envoyé par elghadi_mohamed
Il faut faire un free pour chaque malloc.
Donc dépendant comment tu as alloué ta mémoire, tu devras réagir différement pour la libérer. Cela comprend aussi les allocations éventuelles faites pour les données dans les noeuds.
mais on a fait un malloc sur un champ de la structure alors comment ça ne marche pas !!
est ce que free liberera toutes les ramifications qui utilisent la memoire???
non : 1 free() libère 1 bloc; s'il y a une arborescence, c'est à l'utilisateur de la parcourir.Envoyé par elghadi_mohamed
par ailleurs, penser dans une boucle de libération de liste à toujours copier le pointeur du noeud suivant avant de libérer le noeud courant, sinon attention à la vrille...
Consulte ceci :
http://rperrot.developpez.com/articl...llocationC/#L3
A chaque malloc() doit correspondre un free(). En C, il n'y a aucun automatisme. Mais on on peut le créer...Envoyé par elghadi_mohamed
Bref pour etre conci et repeter les collegues (et avoir le dernier mot, je suis joueur aujourdui), a chaque appel de malloc doit correspondre un appel de free.
Bon, histoire d'etre utilie, pensez a mettre la balise![]()
Partager