SetLength()
инициализирует нулями память, которую она выделяет, так что да, логические значения всегда будут False по умолчанию.
При этом вместо того, чтобы вообще перераспределять массив, рассмотрите возможность сброса логических значений вручную:
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
begin
SetLength(b,3); //All values are False by default
b[0] := True;
//Do something here
for I := 0 to High(b) do
b[I] := False; // or Default(Boolean)
end;
Или вы можете заполнить выделенную память нулями, используя FillChar()
или ZeroMemory()
:
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(b,3); //All values are False by default
b[0] := True;
//Do something here
ZeroMemory(@b[0], Length(b)); // or FillChar(b[0], Length(b), $0);
end;