Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [solved] TObjectList<>.Remove führt zur AV, .Clear nicht?! (https://www.delphipraxis.net/149947-%5Bsolved%5D-tobjectlist-remove-fuehrt-zur-av-clear-nicht.html)

xZise 3. Apr 2010 00:13


[solved] TObjectList<>.Remove führt zur AV, .Clear nic
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
ich bekomme komischerweise bei TObjectList<TVirtualWall>.Remove(...) eine AV. Nun laut Debugger ist OwnObjects aus (was auch so gewünscht ist) und ansonsten sieht auch alles gut aus (die Liste hat ein Objekt, und wenn man sich das anguckt ist es genau das was ich da übergebe).

Nun habe ich aus juks und dollerei (schreibt man das so? :D ) einfach mal TObjectList<TVirtualWall>.Clear aufgerufen und dort kommt es dann zu keiner AV sogar nicht beim Problematischen Aufruf danach. Aktuell habe ich echt keinen Schimmer, woran das liegen könnte.

Ich hänge einfach mal alles dazu an ;) So könnt ihr (Andorra2D vorausgesetzt) das einfach ausprobieren: Platziere zwei Wände nebeneinander und lösche dann eine. Dann sollte Exception ausgelöst werden.

MfG
Fabian

Neutral General 3. Apr 2010 00:29

Re: TObjectList<>.Remove führt zur AV, .Clear nicht?!
 
Hi,

Wie hast du diese Liste erstellt? Je nachdem gibt es da einen Bug, dass der Default-Comparer nicht gesetzt wird. Und dann knallt es.

Empfehlung des Tages:

Delphi-Quellcode:
var List: TObjectList<TVirtualWall>;
begin
  List := TObjectList<TVirtualWall>.Create(IComparer<TVirtualWall>(nil));
Gruß
Neutral General

Panthrax 3. Apr 2010 00:31

Re: TObjectList<>.Remove führt zur AV, .Clear nicht?!
 
7z? Geht's nicht auch normal? :?

Zitat:

Zitat von Delphi-Kompiler
[MSBuild Fehler] Unerwarteter Fehler bei der BRCC32-Aufgabe.
System.IO.FileNotFoundException: Die Datei ".\DrawBall Editor\extra.rc" konnte nicht gefunden werden.
Dateiname: ".\DrawBall Editor\extra.rc"
bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
bei System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
bei Borland.Build.Tasks.Common.CommandLineTask.CreateT empFileIfNecessary(ITaskItem basedOn)
bei Borland.Build.Tasks.Common.CommandLineTask.Execute ()
bei Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask (ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean& taskClassWasFound)


xZise 3. Apr 2010 09:14

Re: TObjectList<>.Remove führt zur AV, .Clear nicht?!
 
Moin,
Zitat:

Zitat von Neutral General
[...]Wie hast du diese Liste erstellt? Je nachdem gibt es da einen Bug, dass der Default-Comparer nicht gesetzt wird. Und dann knallt es.[...]

Naja ganz normal:
Delphi-Quellcode:
constructor TVirtualWall.Create;
begin
  inherited;
  FWallTop := TVirtualWallList.Create(false);
  FWallLeft := TVirtualWallList.Create(false);
  FWallRight := TVirtualWallList.Create(false);
  FWallBottom := TVirtualWallList.Create(false);
end;
Und jup, mit Comparator klappt es.

Zitat:

Zitat von Panthrax
7z? Geht's nicht auch normal? :? [...]

Ja: 7z :mrgreen: ?

Naja das Problem wurde inzwischen behoben.

MfG
Fabian


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz