next up previous contents
Next: Comment interrompre un programme Up: Erreurs à l'exécution Previous: Erreurs dans des calculs

Bouclage infini

L'éternité, c'est long, surtout vers la fin.

Considérons le programme suivant :

void main() /* eternite 1 */
{
  int a, i;

  i = 1; 
  a = 0;
  while (i < 100)
    a = a + i;
}

Ce programme a peu de chance de se terminer sans aide extérieure, car le test i < 100 sera toujours vérifié. En effet, la valeur de la variable i n'est pas modifiée dans la boucle.

C'est également le cas dans cette variante :

void main() /* eternite 2 */
{
  int a, i;

  i = 1; 
  a = 0;
  while (i < 100)
    a = a + i;
    i = i + 1;
}

Le programmeur a cette fois oublié d'inclure l'incrémentation de i dans l'instruction while au moyen d'un bloc {...}.

On déjà vu également des choses du style :

void main() /* eternite 3 */
{
  int i;

  i = 1;
  while ((i < 100) || (i > 0))
    i = i + 1;
}

Le problème vient ici d'une erreur dans la formulation du test, dans cet exemple, le résultat sera toujours vrai.

Une dernière variante, pour la route :

void main() /* eternite 4 */
{
  int i;

  i = 1;
  while (i < 100);
    i = i + 1;
}
Exercice : trouvez l'erreur.



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