Discussion:
Automagische Initialisierung der Variablen
(zu alt für eine Antwort)
Sven Lanoster
2015-11-10 18:41:10 UTC
Permalink
Moin, moin.

Ich bin mir ziemlich sicher, dass sowas hier (zumindest früher mal)
problematisch war, weil Variablen auf Unit-Ebene nicht automatisch
genullt wurden.

var
xStringlist: TStringlist;

procedure TuWas;
begin
xStringlist.Free; // <-- *peng* da xStringlist nicht NIL
end;

Ist das immer noch so? Oder garantiert der Compiler inzwischen, dass
globale Variablen (beim Start) NIL sind?

Was ist, wenn die Variable lokal in der Prozedur (über dem Beginn) steht?

Dass der Speicher für Instanzen von Klassen vorher genullt wird, weiß
ich. Das war schon immer so.

Gruß,
Sven.
--
Seltsam? Aber so steht es geschrieben...
Hans-Peter Diettrich
2015-11-11 01:28:43 UTC
Permalink
Post by Sven Lanoster
Moin, moin.
Ich bin mir ziemlich sicher, dass sowas hier (zumindest früher mal)
problematisch war, weil Variablen auf Unit-Ebene nicht automatisch
genullt wurden.
Das muß schon sehr lange her sein, möglicherweise als es noch keine
initialisierten Variablen oder dynamische Datentypen gab. (D3?)
Post by Sven Lanoster
Ist das immer noch so? Oder garantiert der Compiler inzwischen, dass
globale Variablen (beim Start) NIL sind?
Nein. Ja.
Post by Sven Lanoster
Was ist, wenn die Variable lokal in der Prozedur (über dem Beginn) steht?
Lokale Variablen werden nicht inititialisiert. Zumindest nicht in den
Delphi-Versionen, die ich kenne (bis XE). Mit Ausnahme der dynamischen
Datentypen (managed types) wie String, Array und Interface - die werden
immer initialisiert, und am Ende der Prozedur finalisiert.

DoDi
Sven Lanoster
2015-11-11 18:04:27 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Sven Lanoster
Ich bin mir ziemlich sicher, dass sowas hier (zumindest früher mal)
problematisch war, weil Variablen auf Unit-Ebene nicht automatisch
genullt wurden.
Das muß schon sehr lange her sein, möglicherweise als es noch keine
initialisierten Variablen oder dynamische Datentypen gab. (D3?)
Angefangen hatte ich mit D1. Das ist allerdings schon so lange her, dass
ich mich vielleicht in Bezug auf die globalen Variablen falsch erinnere.
Schön dass das so oder so heute kein Problem ist.
Post by Hans-Peter Diettrich
Post by Sven Lanoster
Was ist, wenn die Variable lokal in der Prozedur (über dem Beginn) steht?
Lokale Variablen werden nicht inititialisiert. Zumindest nicht in den
Delphi-Versionen, die ich kenne (bis XE). Mit Ausnahme der dynamischen
Datentypen (managed types) wie String, Array und Interface - die werden
immer initialisiert, und am Ende der Prozedur finalisiert.
Gut. Also weiterhin bei lokalen Variablen aufs Init achten. Da warnt
einen ja auch der Compiler. Auch bei XE7.

Prima Antwort, danke schön!

Gruß,
Sven.
--
Seltsam? Aber so steht es geschrieben...
Loading...