[C] Libérer un pointeur...

Libérer un pointeur... [C] - Programmation

Marsh Posté le 11-12-2001 à 19:33:53    

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 ?

Reply

Marsh Posté le 11-12-2001 à 19:33:53   

Reply

Marsh Posté le 11-12-2001 à 19:54:08    

ta allouer de la mem avec koi?


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Marsh Posté le 11-12-2001 à 20:02:41    

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;
 
}

Reply

Marsh Posté le 11-12-2001 à 21:02:11    

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

Reply

Marsh Posté le 11-12-2001 à 23:11:18    

qu'est ce que j'aurais du mal à me remettre au C ...

Reply

Marsh Posté le 12-12-2001 à 08:01:39    

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.

Reply

Sujets relatifs:

Leave a Replay

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