升级到XE8后,我们的一些项目开始破坏数据。看起来是TList实现中的一个错误。
program XE8Bug1;
{$APPTYPE CONSOLE}
uses
System.SysUtils, Generics.Collections;
type
TRecord = record
A: Integer;
B: Int64;
end;
var
FRecord: TRecord;
FList: TList<TRecord>;
begin
FList := TList<TRecord>.Create;
FRecord.A := 1;
FList.Insert(0, FRecord);
FRecord.A := 3;
FList.Insert(1, FRecord);
FRecord.A := 2;
FList.Insert(1, FRecord);
Writeln(IntToStr(FList[0].A) + IntToStr(FList[1].A) + IntToStr(FList[2].A));
end.
这段代码在XE7及之前的版本中输出"123"(应该如此),但在XE8中输出"120"。也许有人知道一个快速修复方法?
更新:非官方修复程序在这里
Insert
,所以从未测试过它。 - Jerry Dodge