www.wikidata.de-de.nina.az
Stack Overflow ist eine Weiterleitung auf diesen Artikel Zur Website mit diesem Namen siehe Stack Overflow Website Ein Stapeluberlauf englisch stack overflow findet statt wenn der Aufrufstapel eines Programms die Grosse des dafur vorgesehenen Speicherbereichs uberschreitet 1 Ein Stapeluberlauf verursacht ublicherweise den Absturz des Programms Inhaltsverzeichnis 1 Ursachen 1 1 Rekursion 1 1 1 Beispiel 1 2 Grosse lokale Variablen 1 2 1 Beispiel 2 Abhilfen 3 EinzelnachweiseUrsachen BearbeitenRekursion Bearbeiten Da jeder Unterfunktionsaufruf durch einen Stack Frame der u a Funktionsargumente lokale Variablen und die Rucksprungadresse enthalt reprasentiert wird kann exzessive oder gar unendliche Rekursion den Aufrufstapel zum Uberlaufen bringen Beispiel BearbeitenDie folgende rekursive C Funktion die das i te Element der Fibonacci Folge zuruckgibt verursacht einen Stapeluberlauf wenn i ausreichend gross ist long long fibonacci int i if i 0 return 0 if i 1 return 1 return fibonacci i 1 fibonacci i 2 Grosse lokale Variablen Bearbeiten Da lokale Variablen ublicherweise im Aufrufstapel abgelegt werden kann eine einzige ubergrosse lokale Variable einen Stapeluberlauf verursachen Beispiel BearbeitenDas folgende C Programm verwendet eine absurd grosse lokale Variable und kann somit einen Stapeluberlauf verursachen include lt stdio h gt int main double daten 17179869184 printf f daten 17179869183 return 0 Abhilfen BearbeitenRekursive Funktionen konnen immer in iterative umgewandelt werden bei linear rekursiven Funktionen solche mit nur einem Rekursionsaufruf und einigen weiteren einfachen Fallen geht das sogar formal 2 Einer iterativen Funktion die notigenfalls auch den Laufzeitstack imitiert indem z B eine Stack Datenstruktur von Hand gefullt wird steht der gesamte Speicherbereich des Systems zur Verfugung der ublicherweise mehrere Grossenordnungen grosszugiger ausfallt Den Vorgang bei dem eine rekursive Funktion in eine iterative uberfuhrt wird nennt man Entrekursivierung Nachteilig ist der oft komplexere Code und die dadurch eben notige manuelle Speicherverwaltung sofern nicht eine Laufzeitumgebung mit automatischer Speicherverwaltung eingesetzt wird Einzelnachweise Bearbeiten Robert Sheldon What is stack overflow Abgerufen am 27 August 2023 englisch Peter Padawitz Formale Methoden des Systemaufrufs TU Dortmund Dortmund 3 Februar 2021 S 140 ff Volltext PDF abgerufen am 27 August 2023 Abgerufen von https de wikipedia org w index php title Stapeluberlauf amp oldid 236834649