使用TArray.Copy复制泛型数组后源数组被修改的原因
Delphi XE7中TArray.Copy为何会修改源数组?
你尝试使用Delphi XE7中无文档的TArray.Copy泛型数组复制函数,将源数组元素复制到目标数组,却发现执行后源数组被修改为全零数组。
函数重载定义
class procedure Copy<T>(const Source, Destination: array of T; SourceIndex, DestIndex, Count: NativeInt); overload; static; class procedure Copy<T>(const Source, Destination: array of T; Count: NativeInt); overload; static;
测试代码
var Source : TArray<Integer>; Destination : TArray<Integer>; begin Source := [10, 20]; SetLength(Destination, Length(Source)); //此处Source为[10, 20] TArray.Copy<Integer>(Source, Destination, 0, 0, Length(Source)); //此处Source为[0, 0] end;
问题原因
这是Delphi XE7版本中TArray.Copy的已知实现bug:
- 尽管函数声明里
Source参数标记了const(表示不应被修改),但实际内部实现逻辑出现错误,错误地对源数组执行了写入操作。 - 大概率是函数内部混淆了源、目标数组的操作方向,导致本应写入目标数组的数据覆盖了源数组的内容。
- 由于该函数在XE7中无官方文档,说明它属于未完全成熟的内部函数,存在未被修复的逻辑缺陷。
内容的提问来源于stack exchange,提问作者Fabrizio
相关产品推荐
相关产品推荐

