Što je Integer Overflow?

Prelijevanje cijelog broja odnosi se na fenomen koji se javlja u određenim računalnim vrstama podataka gdje se njihovi predznaci mijenjaju s pozitivnih na negativne, ili obrnuto, kada dosegnu krajeve svojih primjenjivih raspona. U računalnim rasponima, cjelobrojni tipovi podataka imaju kružne raspone, a kada dosegnu jedan kraj svog raspona, odmah se kreću na drugi kraj svog raspona. Ovo se također naziva prekoračenjem cijelog broja.

Predpisani cijeli broj može sadržavati raspon vrijednosti od -231 do (231) – 1. Ovaj cijeli broj ne može imati vrijednost (-231) – 1; umjesto toga, sljedeći broj na koji se povećava nalazi se na drugom kraju njegovog raspona: (231 – 1). Promjena iz negativnog u pozitivno na kraju svog raspona primjer je prekoračenja cijelog broja. Po istom principu, cijeli broj ne može imati vrijednost 231; ova vrijednost bi se umjesto toga prebacila na drugi kraj svog raspona i postala -231.

Ovo prelijevanje ima značajne posljedice tijekom programiranja. Niz može imati samo onoliko indeksa koliko dopušta cijeli broj, a negativni indeksi se ne računaju. Ako programer pokuša stvoriti niz veći od cjelobrojnog tipa, može doći do značajnih grešaka u memoriji jer bi prekoračenje cijelog broja rezultiralo negativnim indeksom. Ovo je posebno opasno u jezicima koji nemaju eksplicitne granice provjeravanja nizova, kao što je C++.

Kada dođe do prekoračenja cijelog broja, može doći do povezanih tipova preljeva kao što su prelijevanje međuspremnika, prelijevanje hrpe i prekoračenje međuspremnika steka. U svim ovim slučajevima, cjelobrojni preljev djeluje tako da preplavi memorijske strukture s više podataka nego što te strukture mogu zamisliti sadržavati. Ova prekoračenja, u jednostavnim programima, često ne čine mnogo više od uzroka neispravne pogreške čitanja ili neispravnog pisanja. Međutim, manipuliranje ovim problemom od strane hakera može izazvati pogreške u memoriji koje mogu uzrokovati ozbiljnije probleme.

U većini jednostavnih programa, prekoračenje cijelog broja nije veliki problem. Ograničenja cjelobrojnog tipa dovoljno su velika da problem prekoračenja ne dođe u igru ​​osim ako se odjednom obrađuje puno podataka. U nekim slučajevima prekoračenje se može ublažiti, kao u slučaju povećanja brojača, korištenjem veće vrste podataka s većim rasponom. Veći tip podataka bi teoretski mogao na kraju naići na isti problem prekoračenja, ali kako rasponi vrsta podataka postaju sve veći, šanse za to postaju sve manje. Raspon svakog cjelobrojnog tipa podataka je najmanje dvostruko veći od sljedećeg najmanjeg, tako da ima dovoljno prostora za dodatne podatke.