gpt4 book ai didi

delphi - Delphi 2009 中的通用 TList<> 在 IndexOf 上崩溃

转载 作者:行者123 更新时间:2023-12-03 15:39:38 30 4
gpt4 key购买 nike

我已经看到很多关于 Delphi 2009 泛型中错误的提及,但从未预料到如此基本的东西会在 Update 3 中失败,同样如此。如果列表包含 1 个或多个项目,则在通用 TList 或 TObjectList 上调用 IndexOf 会导致访问冲突:

type
TTest = class( TObject );

procedure DoTest;
var
list : TObjectList< TTest >;
t : TTest;
begin
list := TObjectList< TTest >.Create;
try
t := TTest.Create;
list.IndexOf( t ); // No items in list, correct result -1
list.Add( t );
list.IndexOf( t ); // Access violation here
finally
list.Free;
end;
end;

异常(exception)是“EAccessViolation:模块“testbed.exe”中地址 0048974C 处的访问冲突。读取地址 00000000”

使用调试 DCU 进行编译会导致 generics.collections.pas 出现问题 - 未分配 FComparer 成员:

function TList<T>.IndexOf(const Value: T): Integer;
var
i: Integer;
begin
for i := 0 to Count - 1 do
if FComparer.Compare(FItems[i], Value) = 0 then
Exit(i);
Result := -1;
end;

这当然使得通用 TList 几乎完全无用。由于Update 3似乎没有修复这个错误,除了升级到XE之外我还有其他办法吗?

最佳答案

看看这个问题。 Why is TList.Remove() producing an EAccessViolation error?

特别是,尝试像这样创建 TList

TList<TTest>.Create(TComparer<TTest>.Default);

关于delphi - Delphi 2009 中的通用 TList<> 在 IndexOf 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216733/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com