begin
  SetLength(X, 1);
  ……
  SetLength(X, 2);
  ……
  SetLength(X, 3);
end;
问题是后面重新分配的时候是在原来的基础上新增呢还是所有内存重新分配
如果是后者,那么重新分配后,前面的元素的内存是不是不确定的呢?从而导致前面的元素数据错乱了

解决方案 »

  1.   

    SetLength好比Realloc,如果空间变大,会复制前面的的内容,如果空间变小,删除后面的内容。
    但是前面内容的指针就不能确定了
    如:
    var
      piList : array of integer;
      P : PInteger;
    begin
      SetLength(piList , 1);
      P := @piList[0];
      P^ := 0;   //这个指针没问题
      SetLength(piList , 100);
      P^ := 0;   //这个指针就不确定,需要重新给指针赋值
      

  2.   

    是的,原Index<NewCount的内容肯定是原内容
    因为有可能整个区域都移动了,所以指针是不确定的,注意是有可能,因此指针要重新赋值,才能保证程序准确无误