next up previous contents
Next: Mise au point et Up: Erreurs à l'exécution Previous: Comment corriger un programme

Débordement de pile

Une pile (stack) est une zone mémoire gérée à la façon d'une pile de briques : toutes les insertions ou suppressions s'effectuent à une extrémité de la pile appelée sommet. La pile d'exécution sert à mémoriser, pendant que votre programme s'exécute, les adresses de retour et les valeurs de paramètres des différents sous-programmes (procédures ou fonctions) appelés successivement.

La taille d'une pile est forcément limitée, c'est pourquoi il se peut qu'elle déborde (stack overflow) si les niveaux d'appel de procédure sont trop nombreux. Le message émis par le système est alors :

Pid 1017 received a SIGSEGV for stack growth failure
suivi par un :
Segmentation fault (core dumped)

Ce problème est souvent lié à l'emploi de procédures ou fonctions récursives (qui s'appellent elles-mêmes). En voici un (mauvais !) exemple :

int factorien(int n)
{
  if (n == 0) return 1;
  else        return (n-1) * factorien(n);
}
void main()
{
  int r;
  r = factorien(3);
}

Il est visible que l'appel à factorien(3) générera un appel à factorien(3) qui lui-même ... jusqu'au débordement de la pile d'exécution.



Michel COUPRIE
Thu Sep 12 13:39:33 METDST 1996