Bonjour,

J'ai besoin de faire des fonctions qui libèrent des structures et les pointeurs qu'elles contiennent.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
typedef struct{
    int* p;
}structA;
 
typedef struct{
    structA s;
}structB;
 
typedef struct{
    structA* s;
}structC;
Je me demande si je peux faire une seule fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
void free_structA(structA* s){
   free(s->p);
   free(s);
}
pour libérer la structA dans 2 cas différents (structB et structC):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
structB b;
structC c;
[...]allocations[...]
free_structA(&b.s);
free_structA(c.s);
free_structA(&b.s); implique un free sur un pointeur de structA qui n'a pas été crée par un malloc. Cela pose-t-il problème? Ou dois-je faire 2 fonctions de libération pour chacun des cas:
1 - libération des pointeurs contenus dans la structure et de la structure comme ici: free_structA(c.s)
2 - libération des pointeurs contenus dans la structure uniquement: free_pointers_in_structA(&b.s)