Autor Beitrag
Jacan
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 27.01.08 14:04 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

MS-DOS, WIN 7, WIN 10
BP7.0, D3, D5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 27.01.08 14:17 
Hallo und :welcome: im Delphi-Forum, user profile iconJacan!

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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

MS-DOS, WIN 7, WIN 10
BP7.0, D3, D5
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: 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.

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?