Forum: Object-Pascal / Delphi-Language
by solus,
26. Apr 2012
Ok, gut, Danke für die Antworten.
Forum: Object-Pascal / Delphi-Language
by solus,
26. Apr 2012
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?
Forum: Object-Pascal / Delphi-Language
by solus,
26. Apr 2012
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.
Forum: Object-Pascal / Delphi-Language
by solus,
26. Apr 2012
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?
Forum: Object-Pascal / Delphi-Language
by solus,
26. Apr 2012
Whoa, was sich doch nicht alles aus einer einfachen Frage ergibt.
Der konkrete Anwendungsfall (über das Minimalbeispiel hinaus) war die Erstellung eines Binären Suchbaums (AVL).
type TKnoten=class(TObject)
rechts,links : TKnoten
...
end;
Forum: Object-Pascal / Delphi-Language
by solus,
25. Apr 2012
Vielen Dank für die Antwort.
Im eigentlichen Anwendungsfall lag keine lokale Variable sondern ein Feld eines Objekts vor.
Gilt hier dasselbe und sollten die Variablen demnach vom Konstruktor wenn benötigt auf nil gestzt werden?
Analoge Frage: Werden globale Variablen initialisert?
grüße,
solus
Forum: Object-Pascal / Delphi-Language
by solus,
25. Apr 2012
Guten Tag,
ich möchte einer Funktion eine Objektreferenz übergeben, die evtl. nil ist.
Die Funktion soll dann erkennen, ob ein nil übergeben wurde und entsprechend (nicht) reagieren.
Bisher dachte ich, dass Objektvariablen immer auf nil initialisert werden, wie integers immer auf 0 initialisiert werden.
Führe ich aber folgenden Code aus:
var blub : TRandomObject;