Dépassement des index d’un tableau

Ceci nous amène à une angoissante question. Que se passe-t-il si par erreur on adresse un élément du tableau qui n’existe pas ? Par exemple si l’on utilise tab[20], puisque les indices valables vont de 0 à 19 dans notre exemple).

Dans ce cas, il ne se passe rien de particulier, et aucune erreur n’est affichée. Simplement, on obtient les entiers qui suivent ou précèdent dans la mémoire. Qu’est-ce à dire ? Du point de vue du tableau tab, la mémoire est organisée en blocs contenant des entiers, tous de la même taille (deux octets dans nos exemples) ; la valeur de tab elle-même est un pointeur sur le premier élément, c’est-à-dire que l’on sait où exactement se trouve l’élément 0. La mémoire a donc l’allure représentée ci-après :

Dans ce schéma, la zone en blanc représente la mémoire allouée par le programme au tableau, c’est-à-dire celle qui lui est réservée. Les zones grises sont des zones de mémoire occupées par d’autres variables, ou par du code. On voit cependant que la numérotation des éléments du tableau indiquée ne s’arrête pas à 19, mais se poursuit au-delà. Elle se poursuit aussi avec des indices négatifs avant le premier élément. Donc, si l’on utilise tab[20], on obtiendra ce qui se trouve en mémoire juste après le tableau, sous la forme d’un entier, c’est-à-dire probablement n’importe quoi. Le comportement du programme ne sera sans doute pas celui espéré. Ce sera pire encore si l’on écrit à cet endroit, car on modifiera ainsi des variables de façon inattendue.

Il s’agit d’un type d’erreur fréquent en C. Nous verrons plus tard comment créer en C++ des tableaux qui vérifient leurs indices avant de les utiliser, grâce à la programmation orientée objet.

Précédent Précédent Sommaire Sommaire Suivant Suivant