Bonjour j'ai une petite question sur la désallocation de mémoire.
J'ai une fonction qui renvoie une structure. Dans cette structure il y'a deux éléments : le premier est un tableau de chaine de caractères allouer dynamiquement dans la fonction et le deuxième le nombre de chaines contenues dans le tableau.
Et je me demande déjà est ce que j'ai le droit de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 struct sortie { long nbelt; char ** tab; }; struct sortie listDIR(char * chemin) { struct sortie listRAW; long nbraw = 0; /* on lit le contenu d'un dossier et on compte le nombre de fichier raw...*/ char ** tabRAW=malloc(nbraw* sizeof(char*)); /* suivi d'un autre malloc fonction de la taille de la chaine*/ /*...*/ listRAW.nbelt=nbraw; listRAW.tab=tabRAW; return(listRAW); } int main(void) { int i, j; char PathName[]="/home/flaherty/Documents/convertisseur/"; struct sortie listRAW = listDIR(PathName); j=(int)listRAW.nbelt; for (i=0; i<j;i++) { printf("%s\n",listRAW.tab[i]); } }
Et ensuite comment je désalloue la mémoire que j'ai alloué à tabRAW qui devient après listRAW.tab ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part listRAW.tab=tabRAW;
j'ai le droit de faire dans le main un truc du genre :
??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for (i=0;i<(int)listRAW.nbelt;i++) { free(listRAW.tab[i]); listRAW.tab[i]=NULL; } free(listRAW.tab); listRAW.tab=NULL;
Partager