Co je celočíselné přetečení?
Celočíselné přetečení označuje jev, ke kterému dochází u určitých typů počítačových dat, kde se jejich příznaky přepínají z pozitivního na negativní, nebo naopak, když dosáhnou konce svých příslušných rozsahů. V počítačovém rozsahu mají celočíselné datové typy kruhové rozsahy a když dosáhnou jednoho konce svého rozsahu, okamžitě se přesunou na druhý konec svého rozsahu. Toto se také nazývá přetečení celého čísla.
Podepsané celé číslo může obsahovat rozsah hodnot od -2 31 do (2 31 ) - 1. Toto celé číslo nemůže mít hodnotu (-2 31 ) - 1; spíše další číslo, ke kterému se zvýší, je na druhém konci svého rozsahu: (2 31 - 1). Příkladem celočíselného přetečení je změna z negativního na pozitivní na konci jeho rozsahu. Stejným znakem nemůže mít celé číslo hodnotu 2 31 ; tato hodnota se místo toho přepne na druhý konec svého rozsahu a stane se -2 31 .
Toto přetečení má při programování významné důsledky. Pole může obsahovat pouze tolik indexů, kolik to umožňuje celé číslo a záporné indexy se nepočítají. Pokud se programátor pokusí vytvořit pole větší, než umožňuje celé číslo, mohou nastat významné chyby paměti, protože přetečení celého čísla by mělo za následek záporný index. To je obzvláště nebezpečné v jazycích, které nemají explicitní limity pro kontrolu polí, jako je C ++.
Když dojde k přetečení celého čísla, mohou nastat související typy přetečení, jako je přetečení vyrovnávací paměti, přetečení haldy a přetečení vyrovnávací paměti zásobníku. Ve všech těchto případech celočíselné přetečení působí na přemostění paměťových struktur více dat, než je tato struktura schopna pojmout. Tyto přetečení v jednoduchých programech často nedělají mnohem více, než způsobují neplatnou chybu čtení nebo neplatného zápisu. Manipulace s tímto problémem hackery však může způsobit chyby paměti, které mohou způsobit vážnější problémy.
Ve většině jednoduchých programů není celé přetečení hlavním problémem. Limity celočíselného typu jsou dostatečně velké, aby se problém přetečení nedostal do hry, pokud nebude zpracováno mnoho dat najednou. V některých případech může být přetečení zmírněno, jako v případě zvyšování počitadel, použitím většího datového typu s větším rozsahem. Větší datový typ by se teoreticky mohl setkat se stejným problémem přetečení, ale jak se rozsahy datových typů zvětšují, šance na to se zmenšují. Rozsah každého typu dat celého čísla je alespoň dvakrát větší než velikost nejmenšího, takže je zde dostatek prostoru pro další data.