stakkoverflyt

Hva er en Stack Overflow?

March 11 by Eliza

Stack overflow er en programmeringsfeil som et forsøk på å skrive data til en bestemt blokk med hukommelsen svikter fordi det ikke er plass igjen i blokken. Denne typen feil skjer på samme måte som buffer overflow, heap overflow, og stack buffer overflow. Forskjellen mellom disse typer feil, avhenger av datamaskinen datastruktur som brukes, og det fellestrekk er at et forsøk oppstår å skrive mer data enn det er ledig plass til å holde den.

Symptomer på en stabel overløp kan variere avhengig av dataspråket som brukes og feilrapportering maskiner tilgjengelig. I C ++, en stabel overløp viser seg ofte som en segmentering feil, og ofte er det ingen tilleggsinformasjon gitt til å bestemme hvor eller hvordan overløp skjedde. Et overløp i Java ofte resulterer i en virtuell maskin krasj som gir ut en rimelig detaljert feil fil. Uavhengig av hvilket språk et overløp skjer, kan det overløp nesten alltid bli korrigert ved riktig debugging og identifikasjon av den opprinnelige overløp kilde.

Programmeringsspråk som tilbyr eksplisitt minnehåndtering er ofte lettere å beskytte mot stakkoverflyt. Allment akseptert programmering praksis tilsier vanligvis at for hvert segment av minne et program tildeler, bør programmet også slette seg selv. C ++ gjør at 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 i stedet bruke implisitt minnehåndtering, er vanskeligere å skjerme fra stack overflow feil. Java håndterer sin egen hukommelse inne sin virtuelle maskin, slik at data ikke kan være eksplisitt slettet på vilje til å gjøre plass til mer.

En vanlig feil av uerfarne programmerere er å anta at en stack overflow ikke kan skje i programmeringsspråk som håndterer sin egen minnehåndtering. Selv om dette virker sannsynlig i starten, er det faktisk ikke tilfelle. Språk med implisitt minnehåndtering har ofte søppeltømmere som frigjør unødvendige blokker av minne, men disse søppeltømmere ikke alltid fungerer på den tiden en programmerer forventer. Stole på søppel samlere er relativt farlig, og det kan ikke alltid beskytte et program fra en overflytsfeil.

Flow feil kan være katastrofale og stanse et helt program, eller de kan være nesten lydløs og la et program for å fortsette videre. Disse andre typer feil er ofte det vanskeligste å finne fordi det kan oppstå feil som kom fra et overløp mange linjer med kode før. En stabel overløp ikke ofte nødvendig å søke gjennom et helt program, men jo lenger et program kan kjøre etter et overløp, kan jo vanskeligere feilen være å finne og fikse.

  • I C ++, en stabel overløp viser seg ofte som en segmentering feil, og ofte er det ingen tilleggsinformasjon gitt til å bestemme hvor eller hvordan overløp skjedde.