Hva er en overstrømning av stabelen?
Stack overflow er en programmeringsfeil der et forsøk på å skrive data til en bestemt blokkering av minne mislykkes fordi det ikke er plass igjen i blokken. Denne typen feil skjer på samme måte som bufferoverløp, overløp av hauger og overskudd av bufferbuffer. Forskjellen mellom disse feilene avhenger av datamaskindatasstrukturen som brukes, og den vanlige funksjonen er at det forsøker å skrive mer data enn det er tilgjengelig plass til å holde den.
Symptomene på en overflate av bunken kan variere avhengig av dataspråket som brukes og feilrapporteringsmaskineriet som er tilgjengelig. I C ++ manifesterer seg ofte en bunkeoverflyt som en segmenteringsfeil, og ofte er det ingen tilleggsinformasjon gitt for å bestemme hvor eller hvordan overløpet skjedde. Et overløp i Java resulterer ofte i et virtuelt maskinbrudd som gir ut en rimelig detaljert feilfil. Uansett hvilket språk et overløp skjer, kan overløpet nesten alltid korrigeres ved riktig feilsøking og identifisering av den opprinnelige overflowkilden.
Dataspråk som tilbyr eksplisitt minnehåndtering er ofte enklere å beskytte mot stackoverløp. Mye godkjent programmeringspraksis dikterer vanligvis at for hvert minnesegment et program tildeler, bør programmet også slette seg selv. C ++ tillater denne mekanismen, og nøye overvåking på denne måten kan holde mengden minne et program bruker til et minimum. Språk som ikke tilbyr eksplisitt minnehåndtering, og som i stedet bruker implisitt minnestyring, er vanskeligere å beskytte mot stackoverløpsfeil. Java håndterer sitt eget minne inne i den virtuelle maskinen, slik at data ikke kan slettes eksplisitt med vilje for å gi plass til mer.
En vanlig feil hos nybegynnere som programmerer er å anta at en bunkeoverløp ikke kan skje på dataspråk som håndterer sin egen minnestyring. Selv om dette virker plausibelt med det første, er det faktisk ikke tilfelle. Språk med implisitt minnehåndtering har ofte søppelsamlere som frigjør unødvendige blokkeringer av minne, men disse søppelsamlerne fungerer ikke alltid på det tidspunktet en programmerer forventer. Å stole på søppeloppsamlere er relativt farlig, og det kan ikke alltid beskytte et program mot en overflow-feil.
Overløpsfeil kan være katastrofalt og stoppe et helt program, eller de kan være nesten stille og la et program fortsette videre. Disse andre typene feil er ofte de vanskeligste å finne fordi det kan oppstå en feil som kom fra et overfylt antall kodelinjer før. Et stabilt overflow krever ikke ofte å søke gjennom et helt program, men jo lenger et program kan kjøre etter et overløp, desto vanskeligere kan feilen være å finne og fikse.