Salut tout le monde,
je me pose la question suivante:
supposons que je fais un malloc dans une fonction (il est donc local):
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.
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 ?? }
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
Partager