Qu'est-ce que Fuite de mémoire (memory leak) ?

Défaut où la mémoire obtenue avec malloc ou une fonction semblable n'est pas libérée par free après usage et où le pointeur qui la désigne est perdu, si bien que la mémoire utilisable ne cesse de diminuer. Elle survient souvent lorsqu'un chemin d'erreur retourne prématurément et saute la libération. Dans un programme court, le système d'exploitation récupère la mémoire à la fin et le défaut passe inaperçu, mais dans les serveurs et les équipements embarqués qui fonctionnent longtemps, la mémoire libre diminue peu à peu jusqu'à ce qu'une allocation finisse par échouer. Des outils comme Valgrind et AddressSanitizer (LeakSanitizer) permettent de la détecter.

Nom japonais: メモリリーク

« Fuite de mémoire (memory leak) » apparaît dans 2 questions d'entraînement réparties sur 2 thèmes, dont Éditeurs de liens, chargeurs et exécutables, Bases de la programmation en C.

Domaine: Bases de la programmation en C

S'entraîner : questions sur Fuite de mémoire (memory leak)

De quelle zone du processus provient généralement la mémoire allouée par malloc en C ?

  1. ALa section .text
  2. BLe tas
  3. CLa section .rodata
Afficher la réponse et l'explication

Réponse : B. Le tas

Le tas est la zone où l'on alloue pendant l'exécution la quantité de mémoire nécessaire et où on la restitue par free lorsqu'elle n'est plus utile. Sa particularité est que la taille et la durée de vie des allocations peuvent être décidées à l'exécution. malloc gère lui-même l'espace libre et, lorsqu'il manque, demande à l'OS d'étendre la zone (appels système brk ou mmap sous Linux). Oublier free laisse subsister de la mémoire inutilisée : c'est une fuite de mémoire.

« Fuite de mémoire (memory leak) » dans les explications

Questions mentionnant « Fuite de mémoire (memory leak) » (2)

  1. De quelle zone du processus provient généralement la mémoire allouée par malloc en C ?
  2. fill et use sont des fonctions définies ailleurs. Quel est le problème de la fonction ci-dessus ?

Termes associés

Allocation dynamique de mémoire Tas (heap) Alignement et remplissage (padding) Champ de bits (bit-field) Comportement indéfini (undefined behavior) Débordement de tampon (buffer overflow) Macro (#define) Pointeur Pointeur de fonction Pointeur pendant (dangling pointer)

Retour au glossaire