Skip to main content

Hvad er en stakoverløb?

Stack Overflow 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 sker på samme måde som bufferoverløb, bunkeoverløb og stakbufferoverløb.Forskellen mellem disse typer fejl afhænger af den computerdata -struktur, der bruges, og det fælles træk er, at der opstår et forsøg på at skrive flere data, end der er tilgængelig plads til at holde dem.

Symptomer på en stakoverløb kan variere afhængigt afBrugt computersprog og fejlrapporteringsmaskineriet til rådighed.I C ++ manifesterer et stakoverløb ofte sig som en segmenteringsfejl, og der er ofte ingen yderligere oplysninger, der er givet for at bestemme, hvor eller hvordan overløbet skete.Et overløb i Java resulterer ofte i en virtuel maskinulykke, der giver en rimelig detaljeret fejlfil.Uanset det sprog, hvor et overløb sker, kan overløbet næsten altid korrigeres ved korrekt fejlsøgning og identifikation af den originale overløbskilde.

Computersprog, der tilbyder eksplicit hukommelsesstyring, er ofte lettere at beskytte mod Stack Overflow.I vid udstrækning accepteret programmeringspraksis dikterer normalt, at for hvert segment af hukommelse, et program tildeler, bør programmet også 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 i stedet bruger implicit hukommelsesstyring, er vanskeligere at beskytte mod stakoverløbsfejl.Java håndterer sin egen hukommelse inde i sin virtuelle maskine, så data kan ikke eksplicit slettes efter vilje til at gøre plads til mere.

En almindelig fejl fra begyndere er at antage, at en stakoverløb ikke kan ske på computersprog, der håndterer deres egen hukommelsesstyring.Selvom dette ser ud til at være plausibelt i starten, er det faktisk ikke tilfældet.Sprog med implicit hukommelsesstyring har ofte affaldsopsamlere, der gratis unødvendige hukommelsesblokke, men disse affaldsopsamlere fungerer ikke altid på det tidspunkt, en programmør forventer.At stole på affaldssamlere er relativt farligt, og det kan ikke altid beskytte et program mod en overløbsfejl.

Overløbsfejl kan være kataklysmisk og stoppe et helt program, eller de kan være næsten tavse og give et program mulighed for at fortsætte.Disse andre typer fejl er ofte de sværeste at finde, fordi der kan opstå en fejl, der kom fra et overløb mange kodelinjer før.En 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 løse.