Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1931 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2065901
ikseg
Qui vivra verra!
Posté le 24-03-2011 à 19:19:55  profilanswer
 

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?

mood
Publicité
Posté le 24-03-2011 à 19:19:55  profilanswer
 

n°2065902
Un Program​meur
Posté le 24-03-2011 à 19:30:04  profilanswer
 

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)
n°2065903
ikseg
Qui vivra verra!
Posté le 24-03-2011 à 19:33:35  profilanswer
 

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

n°2065916
gilou
Modérateur
Modzilla
Posté le 24-03-2011 à 21:08:09  profilanswer
 

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é!  --
n°2065939
h3bus
Troll Inside
Posté le 25-03-2011 à 00:49:21  profilanswer
 

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++
n°2066003
gilou
Modérateur
Modzilla
Posté le 25-03-2011 à 11:35:11  profilanswer
 

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é!  --
n°2066042
olivthill
Posté le 25-03-2011 à 13:09:35  profilanswer
 

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;

n°2066048
gilou
Modérateur
Modzilla
Posté le 25-03-2011 à 13:23:21  profilanswer
 

Ç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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
Vba: Excel >Word , Probleme de decimalesProbleme bioinfo melant l'informatique
Problème Validation XML - Ordre AléatoireProblème avec la fonction setrlimit
problème de liaison d'un objet distantOù ce peut etre le problème ?
Problème Regexprobleme xampp erreur 404
[perl] Probleme double lecture[resolu] problème d'injection SQL, doctrine orm
Plus de sujets relatifs à : Problème de libération (free())


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR