Stack overflow är ett program fel som uppstår när för mycket minne allokeras på run-time anropsstacken av en ansökan . I operativsystemet , detta anropsstacken är bokstavligen en " stack minne " på vilka program variabler och samtal förfarande lagras för användning inom den nuvarande räckvidden för avrättning. De främsta orsakerna till stacken är oändlig rekursion och stack variabler som är för stora . En tredje orsak , men mindre sannolikt , kan inträffa på grund av förlust av stapeln pekaren i minnet .
oändlig rekursion orsakar anropsstacken att rinna över i de flesta dator språk . När ett förfarande eller funktionsanrop annat förfarande eller funktion , tidigare uppgifter om anropsstacken bibehålls och informationen från den nya funktionen fördelas på toppen av stacken . När en funktion som kallar sig rekursivt utan en tydlig form av uppsägning , kommer ansökan tilldela mer minne på stacken kontinuerligt tills mer minne allokeras än finns på stacken , vilket resulterar i stack overflow .
variabler som deklareras på stacken omfatta ingående variablerna i ett förfarande , returvärdet till förfarandet och eventuella variabler medlem som används för beräkningar . Detta kan resultera i stack overflow om den sammanlagda storleken av förfarandet samtalet och dess variabler är större än den tillgängliga stackminne .
Stack Pekaren förlust inträffar när minnet på stacken blir skadad . Detta kan ske genom att försöka få tillträde till funktioner eller data i minnet som tidigare godkändes , 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å grundläggande uppgifter av en viss bit data . Eftersom informationen tekniskt inte finns , blir uppträdande av ansökan odefinierad , och en ändlös ström av funktionsanrop bli möjlig . Denna begränsning sker huvudsakligen endast i låg-nivå , objektorienterade språk , t. ex. C + + .
2 5 6 2 3Previous:nothing Next:Hur konvertera tal till ord i JavaScript