Kaj je pretok celega števila?

Prelivanje celega števila se nanaša na pojav, ki se pojavi v določenih vrstah računalniških podatkov, kjer se njihovi predznaki preklopijo iz pozitivnih v negativni ali obratno, ko dosežejo konce svojih veljavnih obsegov. V računalniških obsegih imajo celoštevilski podatkovni tipi krožne obsege in ko dosežejo en konec svojega obsega, se takoj premaknejo na drugi konec svojega obsega. Temu pravimo tudi celoštevilsko prelivanje.

Predznačeno celo število lahko vsebuje obseg vrednosti od -231 do (231) – 1. To celo število ne more imeti vrednosti (-231) – 1; namesto tega je naslednja številka, na katero se poveča, na drugem koncu njenega obsega: (231 – 1). Sprememba iz negativnega v pozitivno na koncu njegovega obsega je primer prelivanja celega števila. Po istem znaku celo število ne more imeti vrednosti 231; ta vrednost bi namesto tega preklopila na drugi konec svojega obsega in postala -231.

To prelivanje ima pomembne posledice med programiranjem. Matrika ima lahko v sebi le toliko indeksov, kolikor dopušča vrsta celega števila, negativni indeksi pa ne štejejo. Če programer poskuša ustvariti matriko, ki je večja, kot dovoljuje vrsta celega števila, lahko pride do znatnih napak v pomnilniku, ker bi prekoračitev celega števila povzročila negativni indeks. To je še posebej nevarno v jezikih, ki nimajo izrecnega preverjanja mej za matrike, kot je C++.

Ko pride do prelivanja celega števila, se lahko pojavijo povezane vrste prelivanja, kot so prelivanje medpomnilnika, kopičenje in prelivanje medpomnilnika sklada. V vseh teh primerih celoštevilski pretok deluje tako, da preplavi pomnilniške strukture z več podatki, kot jih te strukture lahko predstavljajo. Ta prelivanja v preprostih programih pogosto ne naredijo veliko več kot povzročijo neveljavno napako pri branju ali neveljavnem zapisovanju. Manipulacija te težave s strani hekerjev pa lahko povzroči napake v pomnilniku, ki lahko povzročijo resnejše težave.

V večini preprostih programov prelivanje celega števila ni velika težava. Meje vrste celega števila so dovolj velike, da se problem prelivanja ne pojavi, razen če se hkrati obravnava veliko podatkov. V nekaterih primerih je prelivanje mogoče ublažiti, kot v primeru naraščajočih števcev, z uporabo večje vrste podatkov z večjim obsegom. Večji podatkovni tip bi teoretično lahko naletel na isto težavo s prelivanjem, a ko se obsegi podatkovnih tipov povečajo, so možnosti za to manjše. Obseg vsakega celoštevilskega podatkovnega tipa je vsaj dvakrat večji od naslednjega najmanjšega, zato je dovolj prostora za dodatne podatke.