[free] dois-je libérer la mémoire ?
Salut tout le monde,
je me pose la question suivante:
supposons que je fais un malloc dans une fonction (il est donc local):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
char * foo(char * foo){
char * buffer = malloc(sizeof(char)*strlen(foo)+1);
[...]
return buffer;
}
void main(void){
char *c ="Bonjour";
foo(c);
// Dois-je libérer la mémoire ici ??
} |
Voilà, vu que le malloc est fait dans une fonction, ma logique voudrait que comme une variable locale, elle soit "perdue" à la sortie de la fonction.
Mais ce qui m'interpelle, c'est que, je crois, lors du malloc, on fait une allocation sur le tas et donc, lorsqu'il y a l'épilogue de la fct, on dépile ce qu'il y a sur la stack et on ne touche pas à la heap. Est-ce que c'est fait automatiquement ? est-ce que je me trompe ?
D'un autre côté, si cette zone mémoire est libérée à la sortie de la fct, alors j'aurai un problème pour la réutiliser plus tard (dans la main ici). Donc conclusion: à tout malloc, on doit spécifier explicitement un free, parce qu'il n'est pas libéré.
Par contre, à la fin du processus, qu'est-ce qui s'occupe de libérer toute la mémoire utilisée ?
Merci beaucoup ;)