AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Übergebenes nil erkennen?

Ein Thema von solus · begonnen am 25. Apr 2012 · letzter Beitrag vom 30. Apr 2012
Antwort Antwort
Seite 3 von 5     123 45   
solus

Registriert seit: 25. Apr 2012
7 Beiträge
 
#21

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 21:55
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?)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#22

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:20
Ups, ja hast du. Tut man aber genausowenig

Ist der rechte Teilbaum denn gewollt leer, oder ist das Teil des Problems?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
solus

Registriert seit: 25. Apr 2012
7 Beiträge
 
#23

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:24
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.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#24

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:27
Der müsste aber leider wirklich von Anfang an nil sein, ohne dass man es selbst im Konstruktor setzt . 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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#25

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:30
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:
function balance(knoten : TKnoten) : integer;
begin
result:=hoehe(links)-hoehe(rechts);
end;
Sonst können wir nur unsere befragen, und da ist grad die Batterie leer
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
solus

Registriert seit: 25. Apr 2012
7 Beiträge
 
#26

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:32
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?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#27

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:34
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
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#28

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:35
Wenn ich es (evtl. unnötigerweise) setze, wird es sicher als nil erkannt?
Gegenfrage: Wenn ich ne Integer Variable auf 5 setze, steht dann hinterher 5 drin?

Antwort: ja
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
solus

Registriert seit: 25. Apr 2012
7 Beiträge
 
#29

AW: Übergebenes nil erkennen?

  Alt 26. Apr 2012, 22:40
Ok, gut, Danke für die Antworten.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#30

AW: Übergebenes nil erkennen?

  Alt 27. Apr 2012, 11:04
Delphi-Quellcode:
constructor TKnoten.Create; override;
begin
  inherited Create;
  rechts:=nil;
  links:=nil;
end;
Sollte ich dann aber sicher sein, oder?
Ich würde es genau so machen.
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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:14 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