将动态数组中的所有值重置为默认值

Reset all values to default in dynamic array

请看我的代码:

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
  SetLength(b,0);
  SetLength(b,3); 
end;

我测试了 b[0]=False

我的问题:使用 SetLength(b,0) 然后 SetLength(b,n) 是否是将所有值重置为默认值 (False) 的正确方法? 在所有情况下都是 b[0]=False,还是在某些情况下是 True

SetLength() zero-initializes 它分配的内存,所以是的,默认情况下布尔值始终为 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), [=11=]);
end;