Vad är ett stacköverflöde?
Stack Overflow är ett programmeringsfel där ett försök att skriva data till ett visst minnesblock misslyckas eftersom det inte finns något utrymme kvar i blocket. Denna typ av fel sker på samma sätt som buffertflöden, högflöden överflödar och stapelbuffertflöden. Skillnaden mellan dessa typer av fel beror på att datadatastrukturen används, och det vanliga funktionen är att ett försök inträffar att skriva mer data än det finns tillgängligt utrymme för att hålla den. I C ++ manifesterar sig ofta ett stacköverflöde som ett segmenteringsfel, och ofta finns det ingen ytterligare information som ges för att avgöra var eller hur överflödet inträffade. Ett överflöde i Java resulterar ofta i en virtuell maskinkrasch som ger ut en rimligt detaljerad felfil. Oavsett språk där ett överflöde inträffar kan överflödet nästan alltid korrigeras av rättfelsökning och identifiering av den ursprungliga överflödet.
Datorspråk som erbjuder uttrycklig minneshantering är ofta lättare att skydda mot Stack Overflow. Allmänt accepterad programmeringspraxis dikterar vanligtvis att programmet bör också ta bort sig själv för varje minne av minne som ett program tilldelar. C ++ tillåter denna mekanism, och noggrann övervakning på detta sätt kan hålla mängden minne som ett program använder till ett minimum. Språk som inte erbjuder uttrycklig minneshantering, och istället använder implicit minneshantering, är svårare att skydda från stacköverflödesfel. Java hanterar sitt eget minne i sin virtuella maskin, så data kan inte uttryckligen raderas med viljan för att ge plats för mer.
Ett vanligt misstag av nybörjarprogrammerare är att anta att ett stacköverflöde inte kan hända på datorspråk som hanterar sin egen minneshantering. Medan detta verkar plausibLe till en början är det faktiskt inte fallet. Språk med implicit minneshantering har ofta skräppostare som frigör onödiga minnesblock, men dessa skräpsamlare arbetar inte alltid när en programmerare förväntar sig. Att förlita sig på skräppostare är relativt farligt och det kan inte alltid skydda ett program från ett överflödesfel.
överflödesfel kan vara kataklysmiska och stoppa ett helt program, eller så kan de vara nästan tyst och låta ett program fortsätta vidare. Dessa andra typer av fel är ofta de svåraste att hitta eftersom ett fel kan uppstå som kom från ett överflöd många kodrader tidigare. En stacköverflöde kräver inte ofta att söka genom ett helt program, men ju längre ett program kan köras efter ett överflöde, desto svårare kan felet vara att hitta och fixa.