Problème de libération (free())

Problème de libération (free()) - C - Programmation

Marsh Posté le 24-03-2011 à 19:19:55    

Salut,
Voila ma structure :  
 
typedef struct _liste {
pid_t pid;
char * cmd;
struct _liste * suivant;
} liste;
 
Je crée une liste
liste *liste_tdf;
 
Pour l'allocation je fais :
liste_tdf = malloc(sizeof(liste));
 
Pour la libération :
free(liste_tdf);
 
Après je fais  
if(liste_tdf) printf("ca marche pas" );
 
Et ca m'imprime "ca marche pas", ce qui n'est pas normal car j'ai libéré...
Vous auriez une idée?

Reply

Marsh Posté le 24-03-2011 à 19:19:55   

Reply

Marsh Posté le 24-03-2011 à 19:30:04    

libérer un pointeur ne veut pas dire que les objets contenant la même valeur deviennent nulle par magie.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 24-03-2011 à 19:33:35    

Oui, mais la fonction free n'accepte pas : free(*liste_tdf);

Reply

Marsh Posté le 24-03-2011 à 21:08:09    

if(liste_tdf) printf("ca marche pas" );  
ça teste si liste_tdf est NULL ou pas.
D'après toi, avec ce que tu fais, pourquoi est ce que liste_tdf devrait être mis a NULL?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-03-2011 à 00:49:21    

Je ne connais pas de moyen de tester si un free() n'a pas planté, a part justement que ton programme ne plante pas.
 
Test une free(NULL) tu verras, ça part dans les choux...


---------------
sheep++
Reply

Marsh Posté le 25-03-2011 à 11:35:11    

h3bus a écrit :

Je ne connais pas de moyen de tester si un free() n'a pas planté, a part justement que ton programme ne plante pas.

 

Test une free(NULL) tu verras, ça part dans les choux...

Un programme n'a pas a se préoccuper si free a merdé ou non a priori:
S'il a pas merdé, OK, et s'il a merdé, la mémoire n'est pas désallouée, donc on l'utilisera plus pour autre chose vu qu'elle est pas vue comme libre.
Au pire ça impacte la mémoire libre dispo pour le programme, mais ça a peu de chances de le faire planter (sauf comportement répétitif, et disparition rapide de la mémoire libre dispo).
A+,


Message édité par gilou le 25-03-2011 à 11:35:44

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-03-2011 à 13:09:35    

Je plussoie, et cela d'autant plus que j'ai déjà eu ce problème à débugguer sur un programme écrit par quelqu'un d'autre.
 
Au lieu d'écrire :

free(toto);


 
Toujours écrire :

free(toto);
toto = NULL;

Reply

Marsh Posté le 25-03-2011 à 13:23:21    

Ça, je l'avais pas mis explicitement, afin qu'il le devine avec un peu de réflexion.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed