Ich habe viele Erwähnungen von Bugs in Delphi 2009 Generics gesehen, aber nie erwartet, etwas so grundlegend zu scheitern in Update 3, nicht weniger. Der Aufruf IndexOf auf einem generischen TList oder TObjectList verursacht eine Zugriffsverletzung, wenn die Liste enthält 1 oder mehr Items:Generische TList <> in Delphi 2009 Absturz auf 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;
Die Ausnahme ist „EAccessViolation: Zugriffsverletzung bei Adresse 0048974C in Modul‚testbed.exe‘Lesen der Adresse. 00000000"
mit Debug-DCU Kompilieren führt zu einem Problem in generics.collections.pas - das FComparer Mitglied nicht zugeordnet:
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;
das macht natürlich die allgemeine TList fast völlig nutzlos. Da Update 3 diesen Fehler anscheinend nicht behoben hat, habe ich einen anderen Rückgriff als auf XE zu aktualisieren?
+1 für eine sofortige Lösung des Problems. Danke, Roddy! –