Ceci nous amène à une angoissante question. Que se passe-t-il si par erreur on adresse un élément du tableau qui nexiste pas ? Par exemple si lon 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 nest affichée. Simplement, on obtient les entiers qui suivent ou précèdent dans la mémoire. Quest-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, cest-à-dire que lon sait où exactement se trouve lélément 0. La mémoire a donc lallure 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, cest-à-dire celle qui lui est réservée. Les zones grises sont des zones de mémoire occupées par dautres variables, ou par du code. On voit cependant que la numérotation des éléments du tableau indiquée ne sarrête pas à 19, mais se poursuit au-delà. Elle se poursuit aussi avec des indices négatifs avant le premier élément. Donc, si lon utilise tab[20]
, on obtiendra ce qui se trouve en mémoire juste après le tableau, sous la forme dun entier, cest-à-dire probablement nimporte quoi. Le comportement du programme ne sera sans doute pas celui espéré. Ce sera pire encore si lon écrit à cet endroit, car on modifiera ainsi des variables de façon inattendue.
Il sagit dun type derreur 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 | Sommaire | Suivant |