You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:03:20