AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

stacküberlauf beseitigen

Ein Thema von moppedfahrer · begonnen am 1. Mai 2007 · letzter Beitrag vom 1. Mai 2007
Antwort Antwort
Seite 1 von 3  1 23      
moppedfahrer

Registriert seit: 8. Mär 2007
28 Beiträge
 
#1

stacküberlauf beseitigen

  Alt 1. Mai 2007, 16:47
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??
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#2

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 16:58
Ohne Code wird dir wohl keiner helfen können.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 16:59
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)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 16:59
Es scheint so, ob deine Abbruchbedingung fehlerhaft ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#5

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 17:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 17:04
Ä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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 17:06
Na gut, der Unterschied ist zu meinem Problem ist eben, dass ich keinen Debugger benutzen kann, da ich mit Öffnen mit.. via Explorer arbeite.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 17:07
Warum nicht in der IDE?
Markus Kinzler
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#9

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 17:32
1. Habe ich das vergessen.
2. Sind das hier so derbe Fehler (kein Overflow mehr), dass mir der Debugger nicht viel bringen würde.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: stacküberlauf beseitigen

  Alt 1. Mai 2007, 17:36
Dann für halt mal einen Schreibtischtest durch
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 Uhr.
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