Stack overflow is een applicatie fout die optreedt wanneer er te veel geheugen is toegewezen aan de run - time call stack van een aanvraag . In het besturingssysteem , deze oproep stack is letterlijk een " stack van het geheugen " , waarop de programmering variabelen en procedure oproepen worden opgeslagen voor gebruik binnen het huidige toepassingsgebied van executie . De voornaamste oorzaken van de stack overflow zijn oneindige herhaling en stack variabelen die te groot zijn . Een derde oorzaak , maar minder waarschijnlijk kan optreden als gevolg van het verlies van de stack pointer in het geheugen . Oneindige herhaling Oneindige recursie zorgt ervoor dat de call-stack te overstromen in de meeste computertalen . Wanneer een procedure of functie roept een andere procedure of functie , wordt de eerdere informatie over de call stack onderhouden en de informatie van de nieuwe functie wordt toegekend bovenop de stapel . Wanneer een functie die zichzelf recursief oproepen zonder een duidelijke wijze van beëindiging , de applicatie zal meer geheugen op de stapel voortdurend wijzen totdat er meer geheugen toegewezen dan beschikbaar op de stapel , wat resulteert in stack overflow . Erg grote Stapel variabelen variabelen die worden gedeclareerd op de stapel onder inputvariabelen in een procedure , de return waarde van de procedure en elk lid variabelen gebruikt voor de berekeningen . Dit kan resulteren in een stack overflow als de totale omvang van de procedure call en de variabelen groter is dan de beschikbare stack geheugen . Stack Pointer Verlies Stack pointer verlies treedt op wanneer het geheugen op de stack beschadigd raakt . Dit kan gebeuren door te proberen om functies of data in het geheugen die eerder werden vrijgemaakt, bijvoorbeeld . Als dit gebeurt , een unieke vorm van recursie optreedt , wat resulteert in de toepassing probeert om de basis informatie van een bepaald stuk van de gegevens uit te vinden . Omdat de informatie technisch niet bestaat , werking van de toepassing ongedefinieerd en een eindeloze stroom functieaanroepen mogelijk worden . Deze beperking komt in eerste instantie alleen in low - level , object - georiënteerde talen , zoals C + + .
|