sev*_*ven 8 arrays delphi string
我有一个动态数组myArr.myArr当我们使用SetLength它时,存储在存储器中的是什么?是'00'吗?还是未定义?
SetLengthmyArr在这种情况下,分配16个字节的内存.
myArr : array of byte;
SetLength(myArr, 16);
Run Code Online (Sandbox Code Playgroud)
Van*_*mex 13
引自Delphi 7帮助,"对于长字符串或动态数组变量,SetLength将S引用的字符串或数组重新分配给给定的长度.字符串中的现有字符或数组中的元素被保留,但是新的内容分配的空间是未定义的.一个例外是增加动态数组的长度,其中元素是必须初始化的类型(字符串,变体,变体数组或包含此类型的记录).当S是动态数组时必须初始化的类型,新分配的空间设置为0或nil."
根据我的观察,对于静态数组,未初始化的元素包含随机数据.对于动态阵列,AFAIK因为Delphi 7中,未初始化元素包含它们的默认 没什么价值.但是,你不应该依赖这个事实,因为它是实现细节SetLength.您应该遵循官方文档.
在实践中,它被初始化为零.
该方法SetLength内部调用System.DynArraySetLength.
使用Delphi 5,内存充满了#0.
// Set the new memory to all zero bits
FillChar((PChar(p) + elSize * oldLength)^, elSize * (newLength - oldLength), 0);
Run Code Online (Sandbox Code Playgroud)
我假设在最近的Delphi版本中这种行为没有改变.
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |