Gestion mémoire & pointeurs
Progression
#Gestion de la mémoire et pointeurs
Cette étape du module installe une discipline de gestion mémoire. Nous démarrons avec les primitives d’allocation (malloc
, calloc
, realloc
, free
) et illustrons, à l’aide d’un tampon dynamique, pourquoi la convention « celui qui alloue libère » doit être documentée par du code (structures, fonctions d’initialisation et de destruction). À travers le suivi d’un bug concret, nous visualisons ce qui se passe quand un tampon est réaloué puis partagé sans précautions.
Les pointeurs sont ensuite abordés dans des situations variées. Nous manipulons des pointeurs de fonction pour écrire un qsort
personnalisé, décortiquons l’utilisation de void *
dans les API génériques et expliquons les pointeurs de pointeurs (char **argv
) via la construction d’un mini interpréteur de commandes. Les étudiants apprennent à lire et à écrire ces signatures intimidantes en les reliant à des cas concrets.
Dernier bloc : l’outillage. Nous montrons comment activer les sanitizers (-fsanitize=address,undefined
) pour détecter les erreurs de mémoire au plus tôt, puis comment compléter l’analyse avec Valgrind (memcheck
) afin de valider qu’un projet plus conséquent reste sans fuite. Les ateliers demandent d’écrire un allocateur de pool et un vector
générique, l’objectif étant de manipuler ces outils dès l’implémentation.
#Atelier
- Implémentez un allocateur de pool (
arena
) avecmalloc
initial +bum allocator
. - Écrivez un
vector
générique avecvoid *
et macros.