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.

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 je me demande déjà est ce que j'ai le droit de faire :
Et ensuite comment je désalloue la mémoire que j'ai alloué à tabRAW qui devient après listRAW.tab ?

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