Warum erzeugt TList.Remove () einen EAccessViolation-Fehler?

8

Warum wird EAccessViolation beim Ausführen des folgenden Codes ausgelöst?

%Vor%     
Cody Gray 14.11.2008, 11:22
quelle

4 Antworten

5

Es sieht wie ein Fehler aus.

Wenn Sie mit Debug-Dcu's kompilieren (normalerweise tun Sie das nur, wenn Sie Ihre Vernunft verlieren wollen!), sehen Sie, dass ein Aufruf an den Vergleicher falsch gelaufen ist. Ein (möglicherweise optionaler) dritter Wert einer Vergleichsfunktion ist nicht gesetzt und verursacht die Zugriffsverletzung.

Möglicherweise können Sie also keine Methodenzeiger in eine generische Liste einfügen.

Ok das Folgende funktioniert:

%Vor%

Sie müssen Ihren eigenen Vergleicher definieren, mit etwas mehr Intelligenz; -).

    
Toon Krijthe 14.11.2008 11:59
quelle
3

Zugriffsverletzung wird durch fehlenden Vergleich verursacht. Ich vermute, dass dies in einem Patch behoben wurde, aber das Problem besteht immer noch (zumindest in Delphi 2009), wenn Sie eine TObjectList verwenden, also aktualisiere ich nur mit der einfachsten Lösung:

%Vor%

oder in meinem Fall

%Vor%     
Just Jules 14.01.2010 19:13
quelle
1

Ist es möglich, einen benutzerdefinierten Vergleich an TList<T> zu übergeben? Ich habe D2009 nicht vor mir, also kann ich es nicht versuchen.

    
Steve 14.11.2008 12:19
quelle
0

Der obige Code wird in TForm1 verwendet ...

%Vor%     
yippee 14.11.2008 11:50
quelle

Tags und Links