Un tableau n'existe pas pour le processeur. Il n'y a que des adresses, et une adresse en vaut une autre. Lire au-delà de la fin d'un tableau est donc une opération parfaitement légale, qui rapporte ce qui se trouve là.
Objectif
Nommer ce que le matériel vérifie, et ce qu'il ne vérifie pas.
Ce que la lecture rapporte
Ce qui se trouve à cette adresse : une autre variable, un morceau de pile, un reste d'un calcul précédent. La valeur change d'une exécution à l'autre et paraît aléatoire, alors qu'elle est parfaitement déterminée par ce que le programme a fait avant.
Pourquoi une chaîne se termine par un zéro
Parce qu'aucune taille n'est stockée nulle part. Le zéro final est la seule marque de fin dont dispose le parcours, et l'effacer transforme la lecture de la chaîne en lecture de toute la mémoire qui suit, jusqu'à tomber par hasard sur un octet nul.