Stack-Überlauf ist ein Fehler in der Anwendung , die , wenn zu viel Speicher auf dem Laufzeit- Call-Stack einer Anwendung zugeordnet ist, auftritt. Im Betriebssystem ist dies Aufrufliste buchstäblich ein " Stapel -Speicher ", auf dem die Programmierung Variablen und Prozeduraufrufe für den Einsatz in den derzeitigen Geltungsbereich der Ausführung gespeichert werden. Die primären Ursachen der Stack-Überlauf sind Endlosschleife und Stack- Variablen, die zu groß sind. Eine dritte Ursache , wenn auch weniger wahrscheinlich , kann aufgrund von Verlust der Stapelzeiger im Speicher. Endlosschleife
Endlosschleife bewirkt, dass die Call-Stack zum Überlaufen in den meisten Programmiersprachen . Wenn eine Prozedur oder eine Funktion eine andere Prozedur oder eine Funktion aufruft, wird die vorherige Information über den Call-Stack gehalten und die Informationen aus der neuen Funktion wird oben auf dem Stapel zugeordnet. Wenn eine Funktion , die sich rekursiv aufruft , ohne eine klare Mittel der Kündigung , wird die Anwendung mehr Speicher auf dem Stack kontinuierlich zuzuweisen , bis mehr Speicher als auf dem Stack zugeordnet wird, was in Stack-Überlauf .
Sehr Große Stapel Variablen
Variablen, die auf dem Stapel deklariert werden, gehören Eingangsgrößen in einer Prozedur , die Rendite für das Verfahren und alle Member-Variablen für Berechnungen verwendet . Dies kann in Stack-Überlauf führen, wenn die kombinierte Größe der Prozedur und ihre Variablen ist größer als der verfügbare Speicher -Stack .
Stapel Pointer Loss
Stapel Zeiger auftritt , wenn der Speicher auf dem Stack beschädigt wird . Dies kann durch den Versuch, Funktionen oder Daten im Speicher gelöscht , die zuvor zum Beispiel wurden zugreifen auftreten . In diesem Fall tritt eine einzigartige Form der Rekursion , was in der Anwendung versucht herauszufinden, die Basis -Informationen von einem bestimmten Teil der Daten . Da die Informationen technisch nicht existiert, wird das Verhalten der Anwendung definiert ist, und ein endloser Strom von Funktion ruft möglich geworden . Diese Einschränkung tritt vor allem nur in Low-Level- , objekt-orientierte Sprachen wie C + +.