? Ein Stack-Überlauf ist eine Art der Programmierung Fehler, wenn ein Programm versucht , mehr Speicher auf der Call-Stack , als verfügbar ist zuteilen auftritt. Es ist eine potenziell schwerwiegende Fehler, der das störende Programm führt zum Absturz zu bringen und ist in der Regel das Ergebnis eines von zwei Design-Fehler . Der Stack
Der Stapel bezieht sich auf einen Teil des Speichers , die verwendet werden, um Informationen über die Funktionen eines Programms speichert. Die Größen und technische Details des Stapels wird je nach Programmiersprache , Compiler , Betriebssystem und Prozessor-Typ , und diese Details werden in der Regel vom Programmierer in den meisten höheren Sprachen versteckt.
Beispiel sein Stapel
Betrachten Sie das folgende Beispiel in Pseudocode :
Funktion a { 1 . Aufruf der Funktion B.2. Aufruf der Funktion c . }
Funktion b {1 . Aufruf der Funktion c.2 . Print Punkt . }
Funktion c {1 . Auflage . }
Da jede Funktion andere Funktionen aufrufen können , besteht der Stapel zu verfolgen, wo in der übergeordneten Funktion, die nach einem Kind Funktion gibt weiterhin zu halten. Dieses Beispiel , wenn in Funktion c gestoppt , kann einen Stack, der etwa so aussieht :
> A1 ---> B1 --------> C1
< p > Seit der ersten Zeile der Funktion A ruft die Funktion B , und die erste Zeile der Funktion B aufruft Funktion C. Nach Funktion C beenden , wird das Programm weiter zurück bis die Kette läuft B2 und schließlich A2 .
Endlosschleife
ein Pufferüberlauf tritt auf, wenn ein Programm versucht, zu viele Informationen auf dem Stack zu speichern. Die häufigste Ursache für einen Stack-Überlauf ist ein Design- Fehler genannt Endlosschleife . Betrachten Sie das folgende Beispiel in Pseudocode :
Funktion A { 1 . Aufruf der Funktion A. }
Und die resultierende Stack:
-> A1 ---> A1 --------> A1 ------- -------> A1 ( und so weiter )
Diejenigen, die mit Computer-Programmierung wird dies als eine Variation der Endlosschleife zu erkennen, außer , anstatt ewig laufen , wird dieses Programm schließlich verbrauchen alle der Speicher auf dem Stack , was zu einem Absturz und einem Stack-Überlauf -Fehler.
Prevention
Stack-Überlauf Fehler treten in der Regel , wenn Sie versuchen, rekursive Algorithmen zu implementieren, und der Schlüssel zur Vermeidung meisten Fehler ist es, sicherzustellen , dass die folgenden Bedingungen erfüllt aller rekursiven Implementierungen ist : die rekursive Funktion muss eine Exit- Bedingung, die nicht zu schaffen ist eine weitere Schicht von Rekursion enthalten , und die rekursive Funktion müssen so gestaltet werden , dass jede Schicht der Rekursion muss hinzugefügt werden, bringen die Funktion näher an der Ausfahrt Zustand.
Large lokale Variablen
weitere , viel seltenere Ursache der Stack-Überlauf -Fehler ist die Erklärung der großen lokalen Variablen , in der Regel in der Form von Arrays , die Hunderttausende oder Millionen von Elementen . Der einfachste Weg, Stapelüberläufe in dieser Situation zu vermeiden ist, Zeiger und dynamische Speicherverwaltung verwenden, um zu vermeiden, erklärt die Daten auf dem Stack , wenn solche speicherintensive Operationen aufgerufen werden.