Leçon 22 : La mémoire dynamique — pile, tas et malloc
Jusqu'à présent, toutes nos variables vivaient sur la pile (stack) : elles se créent automatiquement, leur taille est fixée à l'avance, et elles disparaissent à la fin de la fonction. Parfois ça ne suffit pas — par exemple quand on veut un tableau dont la taille n'est connue qu'à l'exécution. C'est
La pile est comme un plateau de cafétéria : on le reçoit automatiquement, et on te le reprend à la fin du repas sans demander. Le tas est comme un entrepôt en location : tu demandes un box de la taille que tu choisis (malloc), tu reçois une clé (le pointeur), et le box est à toi — jusqu'à ce que tu rendes la clé (free). Si tu perds la clé sans la rendre, le box reste occupé.
- pile (stack)
- Zone de mémoire automatique : les variables locales y vivent et disparaissent à la fin de la fonction. Leur taille doit être fixée à l'avance.
- tas (heap)
- Zone de mémoire dans laquelle on demande des blocs à l'exécution. Ce que tu as demandé — c'est ta responsabilité de le libérer avec free.
- malloc(size)
- Demande un bloc de size octets au tas et renvoie son adresse, ou NULL en cas d'échec. Nécessite #include <stdlib.h>.
- free(p)
- Rend au tas le bloc sur lequel p pointe. Chaque malloc a besoin d'un free quand on a terminé.
- vérification de NULL
- Juste après malloc, on vérifie if (p == NULL) — s'il n'y a pas assez de mémoire libre, malloc renvoie NULL et le pointeur ne doit pas être utilisé.