![]() |
AW: Übergebenes nil erkennen?
Es geht doch gerade darum, dass nicht initialisiert wird.
Ich habe einen Baum und will die Höhe des rechten Unterbaums der Wurzel wissen und rufe daher hoehe(wurzel.rechts) auf (jaja unsauber, rechts sollt private sein) dummerweise ist der rechte Unterbaum leer. Da ich aber im constructor wurzel.rechts:=nil gesetzt habe, rufe ich effektiv hoehe(nil) auf und bekomme 0 zurück. Geht das? (PS: Ich hab den Konstruktor dich nicht überladen, sondern überschrieben, oder?) |
AW: Übergebenes nil erkennen?
Ups, ja hast du. Tut man aber genausowenig ;)
Ist der rechte Teilbaum denn gewollt leer, oder ist das Teil des Problems? |
AW: Übergebenes nil erkennen?
Darum geht es doch!
In einem Baum kann doch der rechte Unterbaum einfach leer sein. Der Pointer ist trotzdem da, da dort ja ein Unterbaum sein könnte. |
AW: Übergebenes nil erkennen?
Der müsste aber leider wirklich von Anfang an nil sein, ohne dass man es selbst im Konstruktor setzt :gruebel:. Kannst du evtl. ein Testprojekt hier anhängen, dass das illustriert? Weil mir kam es in all den Jahren nicht vor, dass Delphi (in diversen Versionen) da einfach was vergessen hätte. Kann ich dann zwar erst morgen durch Delphi jagen, aber das wäre doch sehr hilfreich jetzt.
|
AW: Übergebenes nil erkennen?
Ich würde auch empfehlen, wenn schon, dann korrekten Source zu posten, und keinen erdachten, der eh nicht funktioniert, so wie dieser hier.
Delphi-Quellcode:
Sonst können wir nur unsere :glaskugel: befragen, und da ist grad die Batterie leer ;)
function balance(knoten : TKnoten) : integer;
begin result:=hoehe(links)-hoehe(rechts); end; |
AW: Übergebenes nil erkennen?
Ich kann morgen das mal hochladen.
Da ich aber eine Klausur schreibe, ist folgendes momentan für mich wichtiger: Wenn ich es (evtl. unnötigerweise) setze, wird es sicher als nil erkannt? |
AW: Übergebenes nil erkennen?
Probier es aus. Es sollte an sich problemlos sein, das sollte es aber auch schon ohne. Daher vermute ich da Schnitzer an völlig anderen, möglicherweise sogar ganz unbeteiligten Stellen, weswegen das gesamte Projekt prima wär :)
|
AW: Übergebenes nil erkennen?
Zitat:
Antwort: ja |
AW: Übergebenes nil erkennen?
Ok, gut, Danke für die Antworten.
|
AW: Übergebenes nil erkennen?
Zitat:
Das meinte ich eigentlich mit "Trau nicht dem Compiler". In dem Fall, dass Du Dir nicht sicher bist, ob die Variablen "richtig" initialisiert werden, solltest Du sie einfach selbst initialisieren. Dann bist Du auf der sicheren Seite. Ich empfinde es auch als "Dokumentation" gut, wenn Variablen initialisert werden, und man sich nicht darauf verlässt, das es der Compiler schon richtig initalisieren wird. Das zeigt dass Du bewusst diesen Wert (in Deinem Fall nil) zugewiesen haben möchtest. Das ist wie beim Rechnen. Auch wenn eindeutig geregelt ist, macht es manchmal Sinn eine Klammer zu setzen. 2*2+2*2 = (2*2)+(2*2) Wenn jemand in den Taschenrechner 2*2+2*2 eingibt macht er (2*2+2)*2 Das sollte jeder wissen, aber mit Klammern ist es eindeutig zu sehen. Nichts anderes wollte ich oben mit meinem Beitrag ausdrücken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz