Annexe A — Gestion de la mémoire¶
Le modèle mémoire en C¶
Un programme C dispose de plusieurs zones mémoire :
| Zone | Contenu | Durée de vie |
|---|---|---|
| Code (Text) | Instructions machine | Toute l'exécution |
| Data | Variables globales/statiques initialisées | Toute l'exécution |
| BSS | Variables globales/statiques non initialisées | Toute l'exécution |
| Stack (Pile) | Variables locales, arguments, adresses de retour | Durée de la fonction |
| Heap (Tas) | Allocations dynamiques (malloc, calloc) |
Jusqu'à free() |
Fonctions d'allocation¶
#include <stdlib.h>
// Alloue n octets (non initialisés)
void *malloc(size_t n);
// Alloue et initialise à zéro
void *calloc(size_t count, size_t size);
// Redimensionne un bloc existant
void *realloc(void *ptr, size_t new_size);
// Libère la mémoire
void free(void *ptr);
Erreurs courantes¶
Fuite mémoire (Memory Leak)¶
Utilisation après libération (Use After Free)¶
Double libération (Double Free)¶
Détecter les fuites avec Valgrind¶
Bonnes pratiques¶
- Toujours vérifier que
mallocne retourne pasNULL - Mettre le pointeur à
NULLaprèsfree - Utiliser
sizeof(type)plutôt que des tailles codées en dur - Préférer
callocpour les tableaux (initialise à zéro)