Leçon 24 : La sécurité mémoire — fuites et pointeurs pendants
On a appris à demander de la mémoire — maintenant on apprend à ne pas s'y perdre. Une fuite de mémoire arrive quand on perd le dernier pointeur vers un bloc sans le libérer, par exemple en assignant à p une nouvelle adresse avant free. Une libération double (double free) est un comportement indéfini
Pense à des clés de box de stockage : une fuite, c'est perdre l'unique clé d'un box plein — le box reste occupé pour toujours. Une libération double, c'est essayer de rendre la même clé deux fois — au comptoir on s'affole. Un pointeur pendant, c'est utiliser une copie d'une clé vers un box que tu as déjà rendu — qui sait ce (ou qui) s'y trouve maintenant.
- fuite de mémoire
- Perdre le dernier pointeur vers un bloc alloué sans appeler free — la mémoire reste occupée sans moyen de la libérer.
- libération double (double free)
- Appeler free deux fois sur le même bloc. Comportement indéfini — plantage ou corruption de mémoire.
- pointeur pendant (dangling)
- Un pointeur qui contient toujours l'adresse d'un bloc libéré. L'utiliser (use-after-free) est un comportement indéfini.
- propriété (ownership)
- La façon de penser défensive : chaque bloc a un 'propriétaire' responsable de le libérer — exactement une fois. Toujours se demander 'qui est responsable de libérer ceci ?'.
- valgrind
- Un outil qui exécute le programme et détecte les fuites et erreurs mémoire : valgrind ./prog.