我正在尝试解决此代码中发生的 Delphi XE7 应用程序中的访问冲突,该代码是 Jedi VCL JvMemoryDataset 组件的一部分(Github 的当前源代码):
begin
Data^ := Ord(Buffer <> nil);
Inc(Data);
if Buffer <> nil then
Move(Buffer^, Data^, CalcFieldLen(Field.DataType, Field.Size)) <---------- AV here
else
FillChar(Data^, CalcFieldLen(Field.DataType, Field.Size), 0);
end;
该代码偶尔会在地址 04020111 处导致读取访问冲突。此代码中是否存在明显问题?(CalcFieldLen 可能返回 0,不确定这是否与此处相关)。
我检查了 JVCL 的当前开发版本,并且 Move 调用与我的(旧)本地版本中的相同。
它可能与问题有关https://issuetracker.delphi-jedi.org/view.php?id=6276
相关(带有调试建议):从 D2006 移植到 XE5 后偶尔发生访问冲突,在 XP 兼容模式下不会发生