How can I initialize a record declared as a local variable?
You can use either one of following constructs (where Foo is a record).
FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
From a post from Allen Bauer
While looking at the most common uses for FillChar in order to determine whether most folks use FillChar to actually fill memory with character data or just use it to initialize memory with some given byte value, we found that it was the latter case that dominated its use rather than the former. With that we decided to keep FillChar byte-centric.
Since Delphi 2007, you can use the Default()
intrinsic function:
var
LRecord: TMyRecord;
begin
LRecord := Default(TMyRecord);
...
Note, that you should use Finalize before FillChar or ZeroMemory in some cases.
well, you may apply a simple legal trick
unit unit1;
interface
type
PMyRecord = ^TMyRecord;
TMyRecord = record
Value: Integer;
function Self: PMyRecord;
end;
implementation
function TMyRecord.Self: PMyRecord;
begin
Result := @Self;
end;
procedure Test(AValue: Integer);
const MyRecord: TMyRecord = (Value: 0);
begin
MyRecord.Self.Value := AValue;
end;