Libérer un pointeur... [C] - Programmation
Marsh Posté le 11-12-2001 à 19:54:08
ta allouer de la mem avec koi?
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;
}
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);
}
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); } |
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.
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 ?