如果我先用SetLength(a, 100);
然后我又用SetLength(a,10);
以上这种情况会不会产生内存泄漏???

解决方案 »

  1.   

    不会,Delphi内存管理器管理。
    不必担心。且重新设置大小后内容还可以保存。
      

  2.   

    动态数组本身由Delphi负责释放,当把动态数组的长度设置为零SetLength(a, 0)或者a := nil时,等于手动释放动态数组。但是当动态数组的元素包含了指针变量时,指针所指向的内存需要用户自己释放。
    例如
    var
      a: array of TMemoryStream;
    这时候a里面每个元素都必须调用语句
    for i := Low(a) to High(a) do
      if a[i] <> nil then
      begin
        a[i].Free;
        a[i] := nil;
      end;