Hvad er en stakoverløb?
Stackoverløb er en programmeringsfejl, hvor et forsøg på at skrive data til en bestemt hukommelsesblok mislykkes, fordi der ikke er plads tilbage i blokken. Denne type fejl opstår på samme måde som bufferoverløb, overløb af bunker og stakbufferoverløb. Forskellen mellem disse typer fejl afhænger af den computerdatastruktur, der bruges, og den fælles funktion er, at der sker et forsøg på at skrive flere data, end der er ledig plads til at holde dem.
Symptomerne på et stakoverløb kan variere afhængigt af det anvendte computersprog og tilgængeligt fejlrapporteringsmaskineri. I C ++ manifesterer en stakoverløb sig ofte som en segmenteringsfejl, og der gives ofte ingen yderligere oplysninger til at bestemme, hvor eller hvordan overstrømningen skete. Et overløb i Java resulterer ofte i et virtuelt maskinulykke, der giver en rimelig detaljeret fejlfil. Uanset hvilket sprog, hvor et overløb sker, kan overløbet næsten altid korrigeres ved korrekt fejlsøgning og identifikation af den originale overstrømskilde.
Computersprog, der tilbyder eksplicit hukommelsesstyring, er ofte lettere at beskytte mod stakoverløb. Bred accepteret programmeringspraksis dikterer normalt, at programmet for hvert hukommelsessegment, der tildeles, også skal slette sig selv. C ++ tillader denne mekanisme, og omhyggelig overvågning på denne måde kan holde mængden af hukommelse et program bruger til et minimum. Sprog, der ikke tilbyder eksplicit hukommelsesstyring, og som i stedet bruger implicit hukommelsesstyring, er vanskeligere at beskytte mod stackoverløbsfejl. Java håndterer sin egen hukommelse inde i sin virtuelle maskine, så data kan ikke udtrykkeligt slettes med vilje for at gøre plads til mere.
En almindelig fejl for begynderprogrammører er at antage, at en stakoverløb ikke kan ske på computersprog, der håndterer deres egen hukommelsesstyring. Selvom dette forekommer plausibelt i starten, er det faktisk ikke tilfældet. Sprog med implicit hukommelsesstyring har ofte affaldsopsamlere, der frigør unødvendige blokke af hukommelse, men disse skraldesamlere fungerer ikke altid på det tidspunkt, en programmerer forventer. Det er relativt farligt at stole på affaldsopsamlere, og det kan ikke altid beskytte et program mod en overløbsfejl.
Overflowfejl kan være katastrofalt og standse et helt program, eller de kan være næsten lydløse og tillade et program at fortsætte videre. Disse anden fejltyper er ofte de sværeste at finde, fordi der kan forekomme en fejl, der kom fra et stort antal kodelinjer før. Et stakoverløb kræver ikke ofte at søge gennem et helt program, men jo længere et program kan køre efter et overløb, desto vanskeligere kan fejlen være at finde og rette.