Skip to main content

Qu'est-ce qu'un débordement de pile?

Le débordement de pile est une erreur de programmation dans laquelle une tentative d'écriture de données sur un bloc de mémoire particulier échoue car il n'y a plus d'espace dans le bloc.Ce type d'erreur se produit de la même manière que les débordements de tampon, les débordements de tas et les débordements de tampon de pile.La différence entre ces types d'erreurs dépend de l'utilisation de la structure des données informatiques, et la caractéristique commune est qu'une tentative se produit pour écrire plus de données que l'espace disponible pour le maintenir.

Les symptômes d'un débordement de pile peuvent varier en fonction de laLangage informatique utilisé et les machines de rapport d'erreur disponibles.En C ++, un débordement de pile se manifeste souvent comme un défaut de segmentation, et souvent il n'y a pas d'informations supplémentaires données pour déterminer où ou comment le débordement s'est produit.Un débordement en Java se traduit souvent par un crash de la machine virtuelle qui donne un fichier d'erreur raisonnablement détaillé.Quelle que soit la langue dans laquelle un débordement se produit, le débordement peut presque toujours être corrigé par le débogage et l'identification appropriés de la source de débordement d'origine.

Les langages informatiques qui offrent une gestion explicite de la mémoire sont souvent plus faciles à protéger contre le débordement de pile.La pratique de programmation largement acceptée dicte généralement que pour chaque segment de mémoire qu'un programme alloue, le programme devrait également se supprimer.C ++ permet à ce mécanisme, et une surveillance minutieuse de cette manière peut maintenir la quantité de mémoire qu'un programme utilise au minimum.Les langages qui n'offrent pas de gestion explicite de la mémoire et utilisent plutôt la gestion implicite de la mémoire sont plus difficiles à protéger des erreurs de débordement de pile.Java gère sa propre mémoire à l'intérieur de sa machine virtuelle, de sorte que les données ne peuvent pas être explicitement supprimées à volonté pour faire de la place pour plus.

Une erreur courante des programmeurs novices est de supposer qu'un débordement de pile ne peut pas se produire dans les langages informatiques qui gèrent leur propre gestion de mémoire.Bien que cela semble plausible au début, ce n'est pas réellement le cas.Les langages avec une gestion implicite de la mémoire ont souvent des collectionneurs de déchets qui libèrent des blocs de mémoire inutiles, mais ces collectionneurs à ordures ne fonctionnent pas toujours au moment où un programmeur attend.S'appuyer sur des collectionneurs de déchets est relativement dangereux, et il ne peut pas toujours protéger un programme d'une erreur de débordement.

Les erreurs de débordement peuvent être cataclysmiques et arrêter un programme entier, ou ils peuvent être presque silencieux et permettre à un programme de continuer.Ces seconds types d'erreurs sont souvent les plus difficiles à trouver car une erreur peut se produire qui provient d'un débordement de nombreuses lignes de code auparavant.Un débordement de pile ne nécessite pas souvent de rechercher dans un programme entier, mais plus un programme peut s'exécuter longtemps après un débordement, plus l'erreur peut être difficile à trouver et à corriger.