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

 


Dernière réponse
Sujet : [C] Libérer un pointeur...
mogi

Un4GivN a écrit a écrit :

euh... dsl tout le monde je crois que javais oublié de mettre :
 
if (debut!=NULL)  
 {  
   while(fin!=debut)  
   {  
     courant=fin->avant;  
     fin->avant->suivant=NULL;  
     fin->avant = NULL;
     free(fin);  
     fin=courant;  
   }  
   free(fin);  
 }  
 
:D  




 
du moment que tu fais un free sur fin, les valeurs que tu mets dans l'enregistrement n'ont pas grande importance. de plus, comme tu détruis toute ta chaîne, inutile de retirer le chaînage avant (enfin, je veux dire le champ suivant de ton élément d'avant ;) ). le conseil de tonton mogi, ce matin :
 
if (debut!=NULL)  
 {  
   while(fin!=debut)  
   {  
     courant=fin->avant;  
     free(fin);  
     fin=courant;  
   }  
   free(fin);  
 }  
 
ça, c'est du tout bon, tu peux y aller, l'erreur est ailleurs... par exemple, je ne vois pas l'initialisation de debut dans ton code (ni la déclaration, tiens, c'est une variable globale ? t'as bien dû l'initialiser qque part, hein ?) sinon, à part la petite taille de tes noms de fichiers, je vois pas d'erreurs ???
 
Mogi.


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
mogi

Un4GivN a écrit a écrit :

euh... dsl tout le monde je crois que javais oublié de mettre :
 
if (debut!=NULL)  
 {  
   while(fin!=debut)  
   {  
     courant=fin->avant;  
     fin->avant->suivant=NULL;  
     fin->avant = NULL;
     free(fin);  
     fin=courant;  
   }  
   free(fin);  
 }  
 
:D  




 
du moment que tu fais un free sur fin, les valeurs que tu mets dans l'enregistrement n'ont pas grande importance. de plus, comme tu détruis toute ta chaîne, inutile de retirer le chaînage avant (enfin, je veux dire le champ suivant de ton élément d'avant ;) ). le conseil de tonton mogi, ce matin :
 
if (debut!=NULL)  
 {  
   while(fin!=debut)  
   {  
     courant=fin->avant;  
     free(fin);  
     fin=courant;  
   }  
   free(fin);  
 }  
 
ça, c'est du tout bon, tu peux y aller, l'erreur est ailleurs... par exemple, je ne vois pas l'initialisation de debut dans ton code (ni la déclaration, tiens, c'est une variable globale ? t'as bien dû l'initialiser qque part, hein ?) sinon, à part la petite taille de tes noms de fichiers, je vois pas d'erreurs ???
 
Mogi.

benou qu'est ce que j'aurais du mal à me remettre au C ...
Un4GivN euh... dsl tout le monde je crois que javais oublié de mettre :
 
if (debut!=NULL)  
 {  
   while(fin!=debut)  
   {  
     courant=fin->avant;  
     fin->avant->suivant=NULL;  
     fin->avant = NULL;
     free(fin);  
     fin=courant;  
   }  
   free(fin);  
 }  
 
:D
Un4GivN void get_fichiers(char lecteur[])
{
 int cpt3 = 0;
 char grosseur[20];
 struct ffblk fblock;
 position_fichiers_1 = 0;
 while(path_1[cpt3] != '.')
 {
  cpt3++;
 }
 path_1[cpt3 - 2] = '\0';
 strcat(lecteur, "\\*.*" );
 setcolor(white);
 if (debut!=NULL)
 {
  while(fin!=debut)
  {
   courant=fin->avant;
   fin->avant->suivant=NULL;
   free(fin);
   fin=courant;
  }
  free(fin);
 }
 if(findfirst(lecteur,&fblock,ALL_FILES) != 0 )
 {
 
 }
 else
 {
 // puts("Erreur de lecture !" ); // Pas de fichiers...
 
  moule = malloc(sizeof(struct lafile));
  debut = moule;
  fin = moule;
  moule -> avant = NULL;
  courant = moule;
 
  // Met les donn?es dans une structure ).
  strcpy(moule-> nom_fichier, fblock.ff_name);
  ltoa(fblock.ff_fsize, grosseur, 10);
  strcpy(moule -> size_fichier, grosseur);
  moule -> position = position_fichiers_1;
  position_fichiers_1++;
  moule -> suivant = NULL;
 
  while(findnext(&fblock) == 0)
  {
   moule = malloc(sizeof(struct lafile));
   fin -> suivant = moule;
   moule -> avant = fin;
   moule -> suivant = NULL;
   fin = moule;
   moule -> position = position_fichiers_1;
   position_fichiers_1++;
   strcpy(moule -> nom_fichier, fblock.ff_name);
   ltoa(fblock.ff_fsize, grosseur, 10);
   strcpy(moule -> size_fichier, grosseur);
  }
 }
 depart = debut;
 
}
deathsharp ta allouer de la mem avec koi?
Un4GivN typedef
 struct lafile *plafile;
 struct lafile
  {
   plafile avant;
   char nom_fichier[13];
   char size_fichier[20];
   int position;
   plafile suivant;
  };
 
plafile debut, moule, courant, fin, depart;
---------------------------------------------
  if (debut!=NULL)
  {
    while(fin!=debut)
    {
      courant=fin->avant;
      fin->avant->suivant=NULL;
      free(fin);
      fin=courant;
    }
    free(fin);
  }
 
Ma structure est "rempli" et je veux la vider au complet pour libérer ma mémoire. Il me semble que ça ne fonctionne pas dutout. Quelqu'un connait la réponse ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)