读书人

SetLength设置动态数组长度的有关问题

发布时间: 2012-08-26 16:48:05 作者: rapoo

SetLength设置动态数组长度的问题

Delphi(Pascal) code
begin  SetLength(X, 1);  ……  SetLength(X, 2);  ……  SetLength(X, 3);end;

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

[解决办法]
如果后面有足够空间,会接着分配,如果空间不够,会重新开辟一块区域
[解决办法]
SetLength好比Realloc,如果空间变大,会复制前面的的内容,如果空间变小,删除后面的内容。
但是前面内容的指针就不能确定了
如:
var
piList : array of integer;
P : PInteger;
begin
SetLength(piList , 1);
P := @piList[0];
P^ := 0; //这个指针没问题
SetLength(piList , 100);
P^ := 0; //这个指针就不确定,需要重新给指针赋值


[解决办法]
增加是重新分配, 前面的内容会移动新的空间里面,所以地址会变的; 变小不会

读书人网 >.NET

热点推荐