Débordement par excès et par défaut
Le débordement par excès survient quand on cherche à accéder à une case en dehors du tableau en utilisant un indice plus grand que l'indice maximal possible.
include <stdio.h>
#define MAX 1000
int main()
{
int machin[MAX];
machin[1500] = 10;
}
La case d'indice 1500 n'existe pas puisque l'indice maximal pour le tableau qui a été déclaré est 999.
Le débordement par défaut survient quand on cherche à accéder à une case en dehors du tableau en utilisant un indice plus petit que l'indice minimal possible.
machin[-2] = 17;
La case d'indice -2 n'existe pas puisque l'indice minimal est 0.
Cela peut sembler très surprenant que le compilateur accepte ces instructions, mais c'est le cas. Plus surprenant encore, le programme compilé peut aussi bien fonctionner que ne pas fonctionner.
Les débordements constituent évidemment des erreurs graves de programmation.
Car il est très dangereux d'accéder ainsi à une donnée qui n'existe pas et de la modifier.
En effet, on accède ainsi à des octets dans la mémoire et on les modifie. Cela peut faire "planter" le code, comme cela peut ne pas le faire "planter".
Et puisque le C ne vérifie pas ce genre de chose, ce sont des erreurs très difficiles à détecter quand on les commet.