So, I always heard that class fields (heap based) were initialized, but stack based variables were not. I also heard that recording elements (also based on stacks) were also not initialized. The compiler warns that local variables are not initialized ([DCC Warning] W1036 The variable "x" may not have been initialized), but does not warn about the members of a record. Therefore, I decided to conduct a test.
I always get 0 from integers and false from Booleans for all members of the record.
I tried turning on and off various compiler options (debugging, optimization, etc.), but there was no difference. All my members are initialized.
What am I missing? I'm on Delphi 2009 Update 2.
program TestInitialization; {$APPTYPE CONSOLE} uses SysUtils; type TR = Record Public i1, i2, i3, i4, i5: Integer; a: array[0..10] of Integer; b1, b2, b3, b4, b5: Boolean; s: String; End; var r: TR; x: Integer; begin try WriteLn('Testing record. . . .'); WriteLn('i1 ',R.i1); WriteLn('i2 ',R.i2); WriteLn('i3 ',R.i3); WriteLn('i4 ',R.i4); WriteLn('i5 ',R.i5); Writeln( ',Rs); Writeln('Booleans: ', R.b1, ' ', R.b2, ' ', R.b3, ' ', R.b4, ' ', R.b5); Writeln('Array '); for x := 0 to 10 do Write(Ra[x], ' '); WriteLn; WriteLn('Done . . . .'); except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; ReadLn; end.
Output:
Testing record. . . .
i1 0
i2 0
i3 0
i4 0
i5 0
S
Booleans: FALSE FALSE FALSE FALSE FALSE
Array
0 0 0 0 0 0 0 0 0 0 0 0
Done . . .
variables initialization delphi delphi-2009
Jim McKeeth May 14 '09 at 12:21 a.m. 2009-05-14 00:21
source share