Fuites de mémoire

Une fuite de mémoire est un défaut de programmation qui fait que le programme continue à allouer de la mémoire sans que cette mémoire ne soit libérer. Le résultat est donc (souvent après une exécution très longue) que le système d'exploitation tue le processus à cause de dépassement du quota de mémoire

Il y a deux situations assez différente qui provoque habituellement des fuites de mémoire. La première se produit dans des langages de programmation à gestion manuelle de la mémoire, et la deuxième dans des langages de programmation avec gestion automatique de la mémoire.

Dans les langages à gestion manuelle de la mémoire, il est souvent très difficile de savoir à quel moment il n'existe plus aucun pointeur vers un objet alloué préalablement. Il peut alors arriver que le dernier pointer soit perdu sans que le programme n'ait libérer l'objet. Si cela se produit régulièrement (parce que le même code est exécuté plusieurs fois), alors il y a une fuite de mémoire.

Dans les langages à gestion automatique de mémoire, lorsque le dernier pointeur à un objet est perdu, le ramasse-miettes récupère automatiquement la place occupé par l'objet. La situation qui peut arriver avec un langage à gestion manuelle de la mémoire ne peut donc pas arriver avec un langage à gestion automatique de la mémoire. Par contre. Il peut arriver que le programme maintient un pointeur à un objet (qui peut être arbitrairement grand) sans que la logique du programme permette de le récupérer. Le ramasse-miettes ne peux pas prouver que la logique ne permet pas l'accès à l'objet et il lui est donc impossible de récupérer la place. Par exemple, avec une pile impérative implémenté avec un tableau, la partie du tableau qui n'est pas considéré comme faisant partie de la pile peut contenir des pointeur à des objets que le programme ne peux pas accéder à cause de la logique de l'interface de la pile.