Gründe für Stacküberlauf

December 25

Gründe für Stacküberlauf

Stack-Überlauf ist ein Anwendungsfehler, der auftritt, wenn zu viel Arbeitsspeicher in der Aufrufliste der Laufzeit einer Anwendung zugeordnet ist. Im Betriebssystem ist dieser Call-Stack buchstäblich einen "Stapel Speicher" auf welche Programmierung Variablen, den und Verfahren Anrufe für den Einsatz im aktuellen Gültigkeitsbereich der Ausführung gespeichert sind. Die wichtigsten Ursachen für Stacküberlauf sind unendlich Rekursion und Stack-Variablen, die zu groß sind. Verursachen Sie eine dritte, obwohl weniger wahrscheinlich, durch den Verlust der Stapelzeiger im Speicher auftreten kann.

Endlosschleife

Die Aufrufliste überläuft, in den meisten Programmiersprachen eine Endlosschleife verursacht. Wenn eine Prozedur oder Funktion einer anderen Prozedur oder Funktion aufruft, die vorherige Informationen in der Aufrufliste wird beibehalten und die Informationen von der neuen Funktion wird auf dem Stapel zugeordnet. Wenn eine Funktion, die sich selbst rekursiv ohne klare Mittel zur Beendigung aufruft, wird die Anwendung mehr Speicher auf dem Stack kontinuierlich bis zuordnen wird mehr Speicher als verfügbar auf dem Stapel Stapelüberlauf zugeordnet.

Sehr große Stapelvariablen

Variablen, die auf dem Stapel deklariert werden gehören input-Variablen in einer Prozedur, der Rückgabewert für die Prozedur und Member-Variablen, die für Berechnungen verwendet. Dies kann im Stack-Überlauf führen, wenn die Gesamtgröße der Aufruf der Prozedur und seine Variablen größer als der verfügbare Stack-Speicher ist.

Stack-Pointer-Verlust

Stack Zeiger Verlust tritt ein, wenn auf dem Stapel beschädigt wird. Dies kann geschehen, indem Sie versuchen, Access-Funktionen oder Daten im Speicher, die zuvor gelöscht wurden, zum Beispiel. In diesem Fall tritt eine einzigartige Form der Rekursion, resultierende in der Anwendung die Basisinformationen für einen bestimmten Datenwert herauszufinden. Da die Informationen technisch nicht vorhanden ist, Verhalten der Anwendung wird nicht definiert, und ein endloser Strom von Funktionsaufrufen möglich geworden. Diese Einschränkung tritt in erster Linie nur auf niedriger Ebene, objektorientierte Sprachen wie C++.