Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [Bughunt] A-Stern Implementierung (https://www.delphipraxis.net/134159-%5Bbughunt%5D-stern-implementierung.html)

Romi 16. Mai 2009 20:10


[Bughunt] A-Stern Implementierung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

ich versuche gerade aus Neugier den A*-Algorythmus zu implementieren. Dazu bin ich dem Pseudocode im zugehörigen Wikipedia-Artikel gefolgt. Es kompiliert alles fein und stürzt auch nicht ab, und genau das ist das Problem: Reine Logikfehler sind die schlimmsten :mrgreen:

Nun, meine Funktion BerechneWeg sollte das Zielfeld (zu dem der Weg gesucht wurde) zurückgeben, damit man über den Vorgängerzeiger den Weg zurückverfolgen kann. Das Problem ist nun, er gibt immer nil zurück, was er eigentlich nur machen sollte wenn kein Weg existiert, er also abbricht, weil die OpenQueue leer ist. Ich stehe auf dem Schlauch, vllt. habe ich auch einfach nur zu lang auf den Code geschaut um den Fehler noch zu sehen :gruebel:

Im Anhang die entsprechnden Units.

Danke schonmal,
Roman

Edit: URL-BBcode kaputt?

omata 16. Mai 2009 20:14

Re: [Bughunt] A-Stern Implementierung
 
Anhang?

Romi 16. Mai 2009 20:19

Re: [Bughunt] A-Stern Implementierung
 
Verdammt, ich wusste ich hatte etwas vergessen ;)

Nun ist er da.

omata 16. Mai 2009 20:54

Re: [Bughunt] A-Stern Implementierung
 
Erstmal einige Punkte...

- Objekte werden nicht mit destroy freigegeben (free!)
- Destructor sollte nicht leer sein (inherited + override)
- Empfehlung: Fehlersuche, Debugger verwenden
- Beispielumgebung für die Fehlersuche wäre auch nicht schlecht

Romi 16. Mai 2009 21:03

Re: [Bughunt] A-Stern Implementierung
 
Nicht ganz das Thema, aber ich bin natürlich für jede Verbesserung meines Stils dankbar ;)

Zitat:

Zitat von omata
- Objekte werden nicht mit destroy freigegeben (free!)

Wofür gibt es denn dann die Möglichkeit, einen eigenen Destructor zu schreiben?

Zitat:

Zitat von omata
- Destructor sollte nicht leer sein (inherited + override)

Okay, es erbt von tObject, aber das hat doch nicht zwingent den selben destructor wie ich. Was wird denn da inherited?

Zitat:

Zitat von omata
- Empfehlung: Fehlersuche, Debugger verwenden

Ja, okay, weiß ich. Aber ich finde den Fehler nunmal nicht ;)

Zitat:

Zitat von omata
- Beispielumgebung für die Fehlersuche wäre auch nicht schlecht

Mh, ich habe eine geschrieben, die läuft allerdings mit Andorra2D. Ich dachte mir, dass es wenig nützlich ist, wenn man erst noch Units dazuinstallieren muss und dass es schneller geht, wenn man sich einfach die drei Zeilen in eine eigene Unit macht.

omata 16. Mai 2009 21:12

Re: [Bughunt] A-Stern Implementierung
 
Klar gibt es nunmal immer Gegenargumente, wollte nur mal den Standard erwähnen.

Ja, das mit den zusätzlichen Units ist gut überlegt. Da ich aber keine Lust habe mir erstmal eine Umgebung zu erstellen, in der ich dann dein Problem rekonstruieren kann, werden ich mich gleich wieder ausklinken.

- Es sind auch noch Speicherlecks vorhanden.
- Ist bei dir auch die Bereichsprüfung aktiviert?

Naja, findet sich bestimmt noch jemand...

Viel Glück

himitsu 16. Mai 2009 21:38

Re: [Bughunt] A-Stern Implementierung
 
Zitat:

Zitat von Romi
Wofür gibt es denn dann die Möglichkeit, einen eigenen Destructor zu schreiben?

Der Destructor wird von Free aufgerufen.

OK, das Inherited hat bei Ableitungen von TObjekt noch keine große Auswirkung, da TObject eh einen leeren Dummy-Destructor hat (damit man was zum Überschreiben hat, es aber nicht muß, wenn es nicht nötig ist)

Aber wenn du mal von etwas erbst, welches da was drin hat, dann gibt's Spaß ... also besser einfach immer ein Inherited rein, dann vergißt man es mal nicht.

Override ... wenn man mal dein Objekt über einen Typ einer der Vorfahrenklassen freigibt, dann sollte immer der "richtige"/nötige Destructor in der Wurzelklasse verankert sein, damit auch in dieser Richtung nichts bei Freigeben vergessen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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