Qu'est-ce qu'un débordement d'entier?
Le dépassement d'entier fait référence au phénomène qui se produit dans certains types de données informatiques où leurs signes passent du positif au négatif, ou inversement, lorsqu'ils atteignent les extrémités de leurs plages applicables. Dans les plages d'ordinateur, les types de données entiers ont des plages circulaires et, lorsqu'ils atteignent une extrémité de leur plage, ils passent immédiatement à l'autre extrémité de leur plage. Ceci est également appelé débordement d'entier.
Un entier signé peut contenir une plage de valeurs allant de -2 31 à (2 31 ) - 1. Cet entier ne peut pas avoir une valeur de (-2 31 ) - 1; le nombre suivant auquel il augmente est à l’autre extrémité de sa plage: (2 31 - 1). Le passage de négatif à positif à la fin de sa plage est un exemple de dépassement d'entier. De même, un entier ne peut pas avoir la valeur 2 31 ; cette valeur passerait plutôt à l’autre extrémité de sa plage et deviendrait -2 31 .
Ce débordement a des conséquences importantes lors de la programmation. Un tableau ne peut contenir autant d'indices que le type entier le permet, et les indices négatifs ne comptent pas. Si un programmeur tente de créer un tableau plus grand que le type entier autorisé, des erreurs de mémoire importantes peuvent survenir car un dépassement d'entier entraînerait un index négatif. Ceci est particulièrement dangereux dans les langages qui n'ont pas de limites explicites pour la vérification de tableaux, comme C ++.
En cas de dépassement d'entier, des types de dépassement associés, tels que dépassement de tampon, dépassement de tas et dépassement de tampon de pile peuvent se produire. Dans tous ces cas, le dépassement d'entier a pour effet de surcharger les structures de mémoire avec plus de données que celles-ci ne peuvent en contenir. Ces débordements, dans les programmes simples, ne font souvent pas plus que causer une lecture invalide ou une erreur d'écriture invalide. La manipulation de ce problème par des pirates informatiques peut toutefois générer des erreurs de mémoire pouvant causer des problèmes plus graves.
Dans la plupart des programmes simples, le dépassement d'entier n'est pas un problème majeur. Les limites du type entier sont suffisamment grandes pour que le problème de dépassement de capacité ne soit pas pris en compte sauf si de nombreuses données sont traitées en même temps. Dans certains cas, le dépassement de capacité peut être atténué, comme dans le cas de l'incrémentation de compteurs, en utilisant un type de données plus grand avec une plage plus étendue. En théorie, le type de données plus volumineux pourrait éventuellement rencontrer le même problème de débordement, mais à mesure que les plages de types de données deviennent plus grandes, les chances de le faire diminuent. La plage de chaque type de données entier est au moins deux fois supérieure à celle du prochain plus petit.