Mis on täisarvu ületäitumine?

Täisarvude ületäitumine viitab nähtusele, mis esineb teatud arvuti andmetüüpides, kus nende märgid lülituvad positiivsetest negatiivseteks või vastupidi, kui nad jõuavad kohaldatavate vahemike lõppu. Arvutivahemikes on täisarvulistel andmetüüpidel ringikujulised vahemikud ja kui nad jõuavad oma vahemiku ühte otsa, liiguvad nad kohe oma vahemiku teise otsa. Seda nimetatakse ka täisarvu ületäitumiseks.

Märgiga täisarv võib sisaldada väärtuste vahemikku –231 kuni (231) – 1. Selle täisarvu väärtus ei tohi olla (-231) – 1; pigem on järgmine arv, milleni see kasvab, selle vahemiku teises otsas: (231 – 1). Muutus negatiivsest positiivseks selle vahemiku lõpus on näide täisarvu ülevoolust. Samamoodi ei saa täisarvu väärtus olla 231; see väärtus lülitub selle asemel oma vahemiku teise otsa ja muutub -231.

Sellel ülevoolul on programmeerimisel märkimisväärsed tagajärjed. Massiivis võib olla ainult nii palju indekseid, kui täisarvu tüüp lubab, ja negatiivseid indekseid ei loeta. Kui programmeerija üritab luua massiivi, mis on suurem, kui täisarvu tüüp lubab, võivad tekkida olulised mäluvead, kuna täisarvude ületäitumine tooks kaasa negatiivse indeksi. See on eriti ohtlik keeltes, millel pole massiivide kontrollimiseks selgeid piire, näiteks C++.

Täisarvude ületäitumisel võivad tekkida seotud ületäitumised, nagu puhvri ületäitumine, kuhja ületäitumine ja virna puhvri ületäitumine. Kõigil neil juhtudel koormab täisarvude ületäitumine mälustruktuure rohkemate andmetega, kui need struktuurid arvata suudavad. Need ületäitumised lihtsates programmides ei tee sageli muud, kui põhjustavad kehtetu lugemis- või kirjutamisvea. Selle probleemiga manipuleerimine häkkerite poolt võib aga tekitada mäluvigu, mis võivad põhjustada tõsisemaid probleeme.

Enamikus lihtsates programmides ei ole täisarvude ületäitumine suur probleem. Täisarvu tüübi piirangud on piisavalt suured, et ületäitumise probleem ei tule mängu, kui korraga ei käidelda palju andmeid. Mõnel juhul saab ületäitmist leevendada, nagu loendurite suurendamise korral, kasutades suuremat andmetüüpi suurema ulatusega. Suurema andmetüübi puhul võib teoreetiliselt tekkida sama ülevooluprobleem, kuid kui andmetüüpide vahemikud suurenevad, vähenevad selle võimalused. Iga täisarvulise andmetüübi vahemik on vähemalt kaks korda suurem järgmisest väikseimast, seega on lisaandmete jaoks piisavalt ruumi.