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

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; //这个指针就不确定,需要重新给指针赋值


------解决方案--------------------
增加是重新分配, 前面的内容会移动新的空间里面,所以地址会变的; 变小不会
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值