Salut tout le monde,
je me pose la question suivante:

supposons que je fais un malloc dans une fonction (il est donc local):

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