Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   stacküberlauf beseitigen (https://www.delphipraxis.net/91213-stackueberlauf-beseitigen.html)

moppedfahrer 1. Mai 2007 16:47


stacküberlauf beseitigen
 
Moin moin
ich habe gerade die wunderbar rekursiven "Türme von Hanoi" programmiert.
dabei ist mir aufgefallen, dass er bei größeren Türmen ein out-of-memory anzeigt. Ich hab ver sucht mich mit meinem halbwissen damit auseinanderzusetzen, um das ganze effektiver zu machen (also für mehr Türme). Das ist das Ergebnis meiner suche:
Der Stack ist überlastet und man sollte ihn mithilfe von registern entlasten.

Jaaa... warum ist der denn überlastet (nur wegen der parameter bei der rekursion?), und was ist ein register??

Nils_13 1. Mai 2007 16:58

Re: stacküberlauf beseitigen
 
Ohne Code wird dir wohl keiner helfen können.

3_of_8 1. Mai 2007 16:59

Re: stacküberlauf beseitigen
 
Ein Register ist eine Speichereinheit im Prozessor. Allerdings ist dein Suchergebnis unbrauchbar in diesem Fall. Das Problem ist höchstwahrscheinlich, dass du eine Endlosrekursion gebastelt hast, also du hast keine korrekte Abbruchbedingung.

Wenn du eine Funktion aufrufst, werden die Parameter und die Rücksprungadresse auf den Stack gepackt, und wenn der Stack dann mal voll ist, gibts nen Stacküberlauf. Das passiert entweder bei ner Endlosrekursion oder bei einer sehr stark verschachtelten Rekursion. (Oder wenn du extrem große statische Arrays anlegst)

mkinzler 1. Mai 2007 16:59

Re: stacküberlauf beseitigen
 
Es scheint so, ob deine Abbruchbedingung fehlerhaft ist.

Nils_13 1. Mai 2007 17:02

Re: stacküberlauf beseitigen
 
Ich habe seit über 6 Stunden mit einem Stacküberlauf zu kämpfen und ich kann nur sagen: man kann nur Vermuten, aber rauszufinden woran es liegt, kann Ewigkeiten dauern.

3_of_8 1. Mai 2007 17:04

Re: stacküberlauf beseitigen
 
Ähm... Nachdenken? So viele Möglichkeiten gibt es ja gar nicht, was da falsch sein kann. Einfach mal die rekursiven Funktionen auf Abbruchbedingungen checken, paar Breakpoints setzen, mit dem Stackview und dem Evaluator drüberbügeln, dann findet man das eigentlich recht schnell.

Nils_13 1. Mai 2007 17:06

Re: stacküberlauf beseitigen
 
Na gut, der Unterschied ist zu meinem Problem ist eben, dass ich keinen Debugger benutzen kann, da ich mit Öffnen mit.. via Explorer arbeite.

mkinzler 1. Mai 2007 17:07

Re: stacküberlauf beseitigen
 
Warum nicht in der IDE?

Nils_13 1. Mai 2007 17:32

Re: stacküberlauf beseitigen
 
1. Habe ich das vergessen.
2. Sind das hier so derbe Fehler (kein Overflow mehr), dass mir der Debugger nicht viel bringen würde.

mkinzler 1. Mai 2007 17:36

Re: stacküberlauf beseitigen
 
Dann für halt mal einen Schreibtischtest durch


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz