将所有值重置为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()零initialialialialialsials分配的内存,所以是的,默认情况下,布尔值将始终是错误的。

是说,而不是完全重新分配数组,而是考虑手动重置布尔人:

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;

最新更新