Skip to main content

Hva er en bunke overløp?

Stack Overflow er en programmeringsfeil der et forsøk på å skrive data til en bestemt minneblokk mislykkes fordi det ikke er noen plass igjen i blokken.Denne typen feil skjer på samme måte som bufferoverløp, overløp av hauger og stackbufferoverløp.Forskjellen mellom denne typen feil avhenger av datadatastrukturen som brukes, og den vanlige funksjonen er at det oppstår et forsøk på å skrive mer data enn det er tilgjengelig plass til å holde den.

Symptomer på en bunkeoverflyt kan variere avhengig avDatapråk brukt og feilrapporteringsmaskineriet tilgjengelig.I C ++ manifesterer en bunke overløp seg ofte 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 en virtuell maskinulykke som gir ut en rimelig detaljert feilfil.Uansett språket som et overløp skjer, kan overløpet nesten alltid korrigeres ved riktig feilsøking og identifisering av den originale overløpskilden.

Dataspråk som tilbyr eksplisitt minnestyring er ofte lettere å ivareta mot Stack Overflow.Midt akseptert programmeringspraksis dikterer vanligvis at programmet for alle deler av minne et program tildeler, også skal 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 minnestyring, og i stedet bruker implisitt minnestyring, er vanskeligere å beskytte mot stack -overløpsfeil.Java håndterer sitt eget minne inne i den virtuelle maskinen, slik at data ikke eksplisitt slettes etter vilje for å gi plass til mer.

En vanlig feil av nybegynnere er å anta at en bunkeoverflyt 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øppelinnsamlere som gratis unødvendige blokker med minne, men disse søppeloppsamlerne fungerer ikke alltid på det tidspunktet en programmerer forventer.Å stole på søppelinnsamlere er relativt farlig, og det kan ikke alltid beskytte et program mot en overløpsfeil.

Overløpsfeil kan være kataklysmiske og stoppe et helt program, eller de kan være nesten stille og la et program fortsette videre.Disse andre typene feil er ofte vanskeligst å finne fordi det kan oppstå en feil som kom fra et overløp mange kodelinjer før.En stabeloverløp krever ikke ofte å søke gjennom et helt program, men jo lenger et program kan kjøres etter et overløp, desto vanskeligere kan feilen være å finne og fikse.