Entwickler-Ecke
Sonstiges (Delphi) - Stack Überlauf
Jacan - So 27.01.08 14:04
Titel: Stack Überlauf
Hallo also ich habe mehr oder wniger ein Programm zum lösen von Sudokus erstellt
und rein theoretisch funktioniert auch alles aber manchmal kommt dann der Fehler Stack Überlauf
und da ich bei Delphi noch recht neu bin habe ich keine Ahnung was das heißt und was ich dagegen machen kann
Deshalb Bitte helft mir
LorenzS - So 27.01.08 14:10
im Stack sind meist die daten der procedure gespeichert, entweder hast du ein zutiefer recursive stucfe oder generell zuveile daten in der ausführenden funktion oder procedure, bei letztteren solltest du die variablen glebal deklarieren.
aber ohne explezietem Scorcecode kann man das schwer sagen.
ein kützfristige lösung ware is bei den optionen den stack zuerhöhen, aber 1MB stack sollte eigentlich immer reichen
Yogu - So 27.01.08 14:17
Hallo und :welcome: im Delphi-Forum,
Jacan!
Wahrscheinlich hast du irgendwelche Klassen zwar erzeugt, aber nicht wieder freigegeben. Bitte überprüfe, ob alle Instanzen, die du mit
TKlassenname.Create auch wieder mit
Instanz.Free; freigibst.
Auch bei eigenen Klassen, die Instanzen von anderen Klassen verwenden, musst du diese beim
Destroy wieder freigeben.
Grüße,
Yogu
Jacan - So 27.01.08 14:17
also ich hab schon überall gesucht wo ich den Stack erhöhen kann aber ich find das nicht habe Borland delphi 7
kann mir jemand sagen wo das geht und alle variablen die ich benutze sind global gewählt und was heißt eine zu tiefe rekursive stufe???
LorenzS - So 27.01.08 15:16
mit recusive ist gemeint wenn weine procedure sich selber aufruft.
zB
die procedure hat varialen die 1kb gross sind, so kann man die procedure nur ca.1000 mal redusive aufrufen bis der stack voll ist.
Jacan - So 27.01.08 17:28
was rekursiv ist wusste ich nur has du etwas von einer "zu tiefen" rekursiven Stufe geschrieben das verstehe ich nicht
BenBE - So 27.01.08 17:44
Hochladen ist gut, verlinke ist besser, an den Post anhängen wäre perfekt ...
Ach ja: Im Normalfall sollte man schauen, ob ma die Behandlung der Rekursion auch in eine Iterative Behandlung umarbeiten kann, um genau dieses Problem zu beheben. Ferner hat dies oftmals den Vorteil, dass durch die entfallenden Sprünge der CPU-Cache wesentlich besser genutzt wird und ganz nebenbei das Programm schneller wird.
Genauer kann man das aber mit etwas Source sagen.
P.S.: Tipp im Voraus: Markiere gezielt die Stellen im Quelltext, die Probleme machen. Kaum jemand hat Lust, >200 Zeilen durchzuarbeiten, um eine Hilfestellung zu geben, sei denn es ist WIRKLICH unvermeidbar.
Christian V. - So 27.01.08 19:50
Zur "zu tiefen Stufe":
Wie bereits geschreiben wurde, ist der Stack ein Bereich im Arbeitsspeicher.
Immer wenn du eine Funktion/Prozedur aufrufst, dann wird die Rücksprungadresse in den Stack geschrieben. Sobald wieder "zurück gesprungen" wird, wird der Stack-Zeiger wieder erhöht und der Speicher im stack wird wieder "freigegeben". Wenn du nun zu viele Rekursionsstufen hast, füllt sich der Stack immer mehr, und irgendwann ist er halt voll.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!