Stack overflow är en applikation fel som uppstår när för mycket minne allokeras på run-time anropsstack av en ansökan . I operativsystemet , är denna inbjudan stack bokstavligen en " bunt minne " på vilken programmering variabler och samtal förfarande lagras för användning inom den nuvarande ramen för utförandet . De främsta orsakerna till stack overflow är oändlig rekursion och variabler stack som är för stora . En tredje orsak , men mindre troligt, kan uppstå på grund av förlust av stapelvisaren i minnet. Oändlig rekursion
Oändlig rekursion orsakar anropsstacken att svämma över i de flesta datorspråk . När ett förfarande eller funktion anropar en annan procedur eller funktion , är den tidigare informationen om anropsstacken upprätthålls och informationen från den nya funktionen fördelas på toppen av stacken . När en funktion som anropar sig själv rekursivt utan en tydlig väg för uppsägning , kommer ansökan allokera mer minne på stacken kontinuerligt tills mer minne allokeras än finns på stacken , vilket resulterar i stack overflow .
Mycket stor stack variabler
variabler som deklareras på stacken inkluderar ingångsvariabler till ett förfarande , returvärdet för förfarandet och eventuella variabler medlemsländer används för beräkningar . Detta kan leda till stack overflow om den sammanlagda storleken av förfarandet samtalet och dess variabler är större än den tillgängliga stackminne .
Stackpekaren Förlust
Stack pekare förlust uppstår när minnet på traven blir skadad . Detta kan ske genom att försöka komma åt funktioner eller data i minnet som tidigare röjda , till exempel . Om detta händer , inträffar en unik form av rekursion , vilket resulterar i ansökan att försöka ta reda på basen information av en viss bit data . Eftersom den information som tekniskt inte existerar, blir applikationens egenskaper odefinierad , och en ändlös ström av funktionsanrop blivit möjligt. Denna begränsning sker främst endast i låg - nivå , objektorienterade språk såsom C + + .