? Un débordement de pile est un type d' erreur de programmation qui se produit lorsqu'un programme tente d'allouer plus de mémoire sur la pile d'appel que ce qui est disponible . Il s'agit d'une erreur potentiellement grave qui provoque le programme incriminé à l'accident et est habituellement le résultat d'une des deux erreurs de conception . La pile
La pile se réfère à une partie de la mémoire qui est utilisé pour stocker des informations sur les fonctions d'un programme . Les tailles et les détails techniques de la pile sera varient selon le langage de programmation , un compilateur , système d'exploitation et le type de processeur, et ces détails sont généralement cachés au programmeur dans la plupart des langages de haut niveau.
Exemple pile
Prenons l'exemple suivant en pseudo-code :
fonction
un {1 . fonction b.2 appeler . appeler la fonction c . }
fonction b { 1. fonction c.2 appeler . Coin impression . }
Fonction
c {1 . Tirage . }
Comme chaque fonction peut appeler d'autres fonctions , la pile est là pour garder une trace de l'endroit où la fonction de parent pour continuer après un retour de la fonction de l'enfant. Cet exemple , s'il s'est arrêté à l'intérieur de la fonction c , peut avoir une pile qui ressemble à ceci :
> A1 ---> B1 --------> C1
< p > Depuis la première ligne de la fonction Une fonction appels B, et la première ligne de la fonction B appelle la fonction C. Lorsque la fonction C se terminera , le programme continuera de remonter la chaîne , la course B2 et enfin A2 .
récursion infinie
Un débordement de pile se produit lorsqu'un programme tente de stocker trop d'informations sur la pile. La cause la plus fréquente d'un débordement de pile est une erreur de conception appelé récursion infinie . Prenons l'exemple suivant en pseudo-code :
fonction
{1 . appeler la fonction A. }
la pile résultante :
-> A1 ---> A1 --------> A1 ------- ------- > A1 ( et ainsi de suite )
Ceux qui sont familiers avec la programmation informatique reconnaîtront qu'il s'agit d' une variante de la boucle infinie , à l'exception , plutôt que de courir toujours, ce programme finira par consommer tout la mémoire sur la pile, résultant dans un accident et une erreur de débordement de pile.
prévention
pile erreurs de dépassement se produit généralement lorsque l'on tente de mettre en œuvre des algorithmes récursifs , et la clé d'éviter la plupart des erreurs est de s'assurer que ce qui suit est vrai de tous implémentation récursive : la fonction récursive doit contenir une condition de sortie qui ne crée pas une autre couche de la récursivité et la fonction récursive doit être conçu de telle sorte que chaque couche de la récursivité ajoutée doit apporter la fonction de plus près à la condition de sortie .
grandes variables locales
autre , cause beaucoup plus rare d'erreurs de dépassement de pile est la déclaration de grandes variables locales , généralement sous la forme des tableaux contenant des centaines de milliers , voire des millions , d'éléments . Le plus simple pour éviter les débordements de pile dans cette situation est d'utiliser des pointeurs et l'allocation dynamique de la mémoire pour éviter de déclarer les données sur la pile lorsque ces opérations gourmandes en mémoire sont nécessaires.