调整大小时,Delphi中的SetLength是否会保留内存?

时间:2014-01-27 20:08:20

标签: arrays delphi

在Delphi中,如果你将setlength设置为增量减少动态数组的大小,它是否会保留数组的原始内容?

单个多维数组是否相同?

到目前为止,我总是假设它会在放大尺寸时保留旧数据,但不确定它是否总是这样或者我一直都很幸运。

1 个答案:

答案 0 :(得分:5)

  

在Delphi中,如果使用SetLength增加或减小动态数组的大小,它是否会保留数组的原始内容?

  

单维或多维数组是否相同?

是。请记住,多维数组只不过是一个单元数组,其元素类型是一个数组。因此,您对单维数组的了解适用于多维数组。


documentation确实涵盖了这一点:

  

对于动态数组变量,SetLength将S引用的数组重新分配给给定的长度。保留数组中的现有元素,并将新分配的空间设置为0或nil。对于多维动态数组,SetLength可能需要多个长度参数(最多为数组维数)。每个参数指定沿特定维度的元素数量。