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

  FORUM HardWare.fr
  Programmation
  C

  Libération de la mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Libération de la mémoire

n°1423095
Gattuso
Posté le 09-08-2006 à 17:22:44  profilanswer
 

Bonjour,
 
je voudrais savoir comment se passe la libération de la mémoire pour des char **, char ***, struct nom **, etc  
Par exemple, dans mon cas, j'ai 2 structures :

Code :
  1. typedef struct noeud{
  2. int n;
  3. struct noeud **tab;
  4. }Noeud;
  5. typedef struct{
  6. Noeud *racine;
  7. }Graphe;


 
Comment s'écrirait la fonction int libérerGraphe(Graphe **g) permettant de libérer un graphe.
 
Merci

mood
Publicité
Posté le 09-08-2006 à 17:22:44  profilanswer
 

n°1423101
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 17:26:35  profilanswer
 

Tu dois libérer les pointeurs les plus profonds en remontant.
 
Dans le cas d'un graph, tu commence par les feuilles, etc.

n°1423106
Elmoricq
Modérateur
Posté le 09-08-2006 à 17:31:47  profilanswer
 

Pour compléter ce que dit _darkalt3_, en règle générale, il y a autant de free() que de ?alloc().

Message cité 1 fois
Message édité par Elmoricq le 09-08-2006 à 17:32:11
n°1423121
pfuitt
Posté le 09-08-2006 à 17:48:04  profilanswer
 

Elmoricq a écrit :

Pour compléter ce que dit _darkalt3_, en règle générale, il y a autant de free() que de ?alloc().


 
 
  :pfff:  Oups !
 
 si tu fais un malloc, puis un realloc, tu n'as qu'un seul free, pas deux !
 

n°1423122
pains-aux-​raisins
Fatal error
Posté le 09-08-2006 à 17:49:47  profilanswer
 

pfuitt > realloc ne rentre pas dans le pattern ?alloc().
il n'a pas mis *alloc() ou +alloc() ;)

n°1423125
pfuitt
Posté le 09-08-2006 à 17:53:25  profilanswer
 

pains-aux-raisins a écrit :

pfuitt > realloc ne rentre pas dans le pattern ?alloc().
il n'a pas mis *alloc() ou +alloc() ;)


autant pour moi !
 
me flagele avec des orties fraichement coupées
 
 
mais bon ...tendancieux comme conseil, n'est il pas ?
:)


Message édité par pfuitt le 09-08-2006 à 17:53:40
n°1423126
Elmoricq
Modérateur
Posté le 09-08-2006 à 17:54:47  profilanswer
 

Non, parce que realloc() est une fonction si particulière qu'un traitement particulier lui est réservé. ;)

n°1423499
Gattuso
Posté le 10-08-2006 à 11:07:25  profilanswer
 

Dans le cas de mes structures, la libération du graphe, se fait de cette manière ?
 
MAXNOEUDS est le nombre de fils max que peut avoir un sommet

Code :
  1. int libereNoeud(Noeud *n){
  2.   int i;
  3.   for(i=0; i<MAXNOEUDS ;i++){
  4.     if((n->tab[i])!=NULL){
  5.       libereNoeud(n->tab[i]);
  6.       free(n->tab[i]);
  7.     }
  8.   }
  9.   free(n);
  10.   return 1;
  11. }
  12. int libereGraphe(Graphe **g)
  13. {
  14.   if(*g != NULL)
  15.     {
  16.       libereNoeud(*g->racine);
  17.       free(*g);
  18.     }
  19.  
  20.   free(g);
  21.   return 1;
  22. }


Message édité par Gattuso le 10-08-2006 à 11:08:41
n°1424971
Trap D
Posté le 13-08-2006 à 12:16:45  profilanswer
 

Je ne comprends pas pourquoi tu renvoies des valeurs qui ne sont pas utilisées.
D'autre part, j'aurais tendance à écrire libereNoeud((*g)->racine);


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

  Libération de la mémoire

 

Sujets relatifs
[opengl]Pb: liberation mémoire textures [RESOLU]Modification des argv[i] et libération de la mémoire
liberation memoire[VBS] [Résolu] Libération mémoire d'objet WORD
FreeImage liberation memoireliberation de la memoire utilise
STL et libération mémoireLibération de mémoire qui ne se fait pas...
[C] problème avec libération de la mémoire[C] plantage a la liberation de la memoire
Plus de sujets relatifs à : Libération de la mémoire


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