Problème de libération (free()) - C - Programmation
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.
Marsh Posté le 24-03-2011 à 19:33:35
Oui, mais la fonction free n'accepte pas : free(*liste_tdf);
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+,
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...
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+,
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); |
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+,
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?