我有一个动态数组myArr
。当我们使用myArr
时,SetLength
中的内存中存储了什么?是'00'吗?还是未定义?
SetLength
为myArr
分配16个字节的内存。
myArr : array of byte;
SetLength(myArr, 16);
答案 0 :(得分:13)
引用Delphi 7帮助,“对于长字符串或动态数组变量,SetLength
将 S 引用的字符串或数组重新分配给给定的长度。
保留数组中的字符串,但新分配的空间的内容未定义。一个例外是增加动态数组的长度,其中元素是必须初始化的类型(字符串,变体,变体数组或包含此类型的记录)。当 S 是必须初始化的动态类型数组时,新分配的空间将设置为0
或nil
。“
根据我的观察,对于静态数组,未初始化的元素包含随机数据。对于动态数组,自Delphi 7以来的AFAIK,未初始化的元素包含默认值 nothing 值。但是,您不应该依赖这个事实,因为它是SetLength
的实现细节。您应该遵循官方文档。
答案 1 :(得分:7)
实际上,它是用零的初始化。
方法SetLength
内部调用System.DynArraySetLength
使用Delphi 5
,内存会被#0
填充。
// Set the new memory to all zero bits
FillChar((PChar(p) + elSize * oldLength)^, elSize * (newLength - oldLength), 0);
我认为在最近的Delphi版本中这种行为没有改变。