Débordement de pile est une erreur d'application qui se produit chaque fois que trop de mémoire est allouée sur la pile d'appel d'exécution d'une application. Dans le système d'exploitation, cette pile d'appel est littéralement une « pile de mémoire " sur les variables de programmation et les appels de procédure sont stockés pour une utilisation dans le cadre actuel de l'exécution. Les principales causes de débordement de pile sont récursion infinie et variables de pile qui sont trop grands . Une troisième cause , quoique moins probable, peut survenir en raison de la perte du pointeur de pile dans la mémoire. Infini récursivité
Infini récursivité provoque la pile d'appel de déborder dans la plupart des langages informatiques . Lors d'une procédure ou une fonction appelle une autre procédure ou de la fonction , les informations précédentes sur la pile d'appel est maintenu , et les informations de la nouvelle fonction est affectée au sommet de la pile . Quand une fonction qui s'appelle récursivement sans un moyen clair de résiliation, l'application va allouer plus de mémoire sur la pile en continu jusqu'à ce que plus la mémoire est allouée à disposition sur la pile , ce qui entraîne un débordement de pile .
Très les grandes variables de pile
de variables qui sont déclarées sur la pile comprennent des variables d'entrée dans une procédure , la valeur de retour de la procédure et des variables de membre utilisées pour les calculs . Cela peut se traduire par débordement de pile si la taille combinée de l'appel de procédure et ses variables est supérieure à la mémoire disponible pour la pile .
Stack Pointer perte
Stack perte de pointeur se produit quand la mémoire sur la pile devient corrompu. Cela peut se produire en essayant d' accéder à des fonctions ou des données en mémoire qui étaient auparavant classées, par exemple . Dans ce cas, une forme unique de récursivité se produit , entraînant l'application en essayant de trouver les informations de base d'un morceau donné de données . Parce que l'information technique n'existe pas , le comportement de l'application devient indéfini , et un flot ininterrompu de fonction appelle devienne possible. Cette limitation se produit principalement seulement dans de bas niveau, les langages orientés objet tels que C + + .