TDynArray=array of integer;procedure TForm1.BitBtn2Click(Sender: TObject);
var
  fDynArray: TDynArray;
  i:Integer;
  lbErr:boolean;
begin
  setLength(fDynArray,8);
  for i := low(fDynArray) to high(fDynArray) do
  begin
    fDynArray[i] := i;
  end;
  ZeroMemory(@fDynArray[low(fDynArray)],High(fDynArray)+1); //POS1
  //ZeroMemory(fDynArray,High(fDynArray)+1);                //POS2  lbErr := false;
  for i := low(fDynArray) to high(fDynArray) do
  begin
    if fDynArray[i]>0 then
    begin
      lbErr := true;
      break;
    end;
  end;
  if lbErr then
    ShowMessage('Has data')
  else
    ShowMessage('Not has data');
end;为什么无论用POS1或POS2方式都清0不了此一维动态数组?难道非要一个个用笨办法写值清0

解决方案 »

  1.   

    NONO。。我没说清楚。我这个例子是测试的。实际上我用的是一个全局的数组。在程序运行过程中一直存在。不能nil,也不能set为0,因为其他地方可能正在使用,我只是清0
      

  2.   

    ZeroMemory(@fDynArray[low(fDynArray)],(High(fDynArray)-Low(fDynArray) + 1)*SizeOf(Integer));
      

  3.   

    FillChar(@fDynArray[low(fDynArray)],(High(fDynArray)-Low(fDynArray) + 1)*SizeOf(Integer)), 0);