Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Allgemeine Frage zu Listen. (https://www.delphipraxis.net/186106-allgemeine-frage-zu-listen.html)

ngott2 4. Aug 2015 09:05

Allgemeine Frage zu Listen.
 
Hallo,
ich hätte mal eine allgemeine zu einer Tobjectlist.
Wenn ich zu einer Liste Objekte hinzufüge (OwnsObjects ist true)
und die Liste nachher mit Freeandnil wieder freigebe müsste er den Speicher doch eigentlich wieder Freigeben oder ?
Die werden mir danach aber immer noch als Memleak angezeigt und der Destructor der Objekte wird auch nicht aufgerufen.

Hat jemand eine Idee warum der Destructor nicht aufgerufen wird und es immer noch Speicherleaks gibt ?

Gruß,
ngott2

BUG 4. Aug 2015 09:13

AW: Allgemeine Frage zu Listen.
 
Ich denke das ist eine Frage wo ein minimales Beispielprogramm (klein(st)es Programm wo dieser Fehler auftritt) nützlich wäre.

baumina 4. Aug 2015 09:21

AW: Allgemeine Frage zu Listen.
 
Objekte, die du erzeugst, musst du auch wieder freigeben, unabhängig davon, ob du diese auch noch zusätzlich in einer Objektliste führst.

Der schöne Günther 4. Aug 2015 09:26

AW: Allgemeine Frage zu Listen.
 
Doch, das ist doch grade der Sinn einer TObjectList- Die Objekte gehören dieser Liste. Wenn die Liste zerstört wird, zerstört sie auch alle Objekte die ihr gehören.

Ist ja nicht anders wie bei einem Formular- Der gehören die darauf enthaltenen Komponenten auch.

Bjoerk 4. Aug 2015 09:27

AW: Allgemeine Frage zu Listen.
 
Wenn es eigene Objecte sind, die der Liste hinzugefügt werden. Haben die einen destructor und wenn ja hast du das override dort vergessen?

baumina 4. Aug 2015 09:32

AW: Allgemeine Frage zu Listen.
 
Stimmt, ich nehm alles zurück und behaupte das Gegenteil :oops:

Zitat:

Ist die Eigenschaft OwnsObjects auf true gesetzt (Voreinstellung), verwaltet TObjectList den Speicher seiner Objekte, das heißt, ein Objekt wird freigegeben, wenn sein Index neu zugewiesen wird, wenn es mit der Methode Delete, Remove oder Clear aus der Liste entfernt wird oder wenn die Instanz TObjectList selbst aufgelöst wird.

haentschman 4. Aug 2015 09:39

AW: Allgemeine Frage zu Listen.
 
Moin...8-)
Zitat:

Die werden mir danach aber immer noch als Memleak angezeigt und der Destructor der Objekte wird auch nicht aufgerufen.
...das ist mir noch nie vorgekommen.
Folgende Ideen dazu:
1. Du überschreibst den Listeninhalt mit neuen Objekten. Dann wird das ursprüngliche Objekt nicht entfernt beim Zerstören der Liste.
2. Die Wahrscheinlichkeit geht gegen 0 das das FreeAndNil verantwotlich ist. Versuche mal nur Free.

...ansonsten kann man dir, wie schon gesagt, nur helfen mit ein wenig Quellcode. :P

mkinzler 4. Aug 2015 09:43

AW: Allgemeine Frage zu Listen.
 
Zitat:

1. Du überschreibst den Listeninhalt mit neuen Objekten. Dann wird das ursprüngliche Objekt nicht entfernt beim Zerstören der Liste.
Zitat:

...das heißt, ein Objekt wird freigegeben, wenn sein Index neu zugewiesen wird
Zitat:

2. Die Wahrscheinlichkeit geht gegen 0 das das FreeAndNil verantwotlich ist. Versuche mal nur Free.
FreeAnNil( obj); ruft obj.Free auf

Sir Rufo 4. Aug 2015 09:52

AW: Allgemeine Frage zu Listen.
 
Minimalst sollte es so aussehen
Delphi-Quellcode:
TFoo = class
public
  destructor Destroy; override;
end;

destructor TFoo.Destroy;
begin
  inherited;
end;

procedure Test;
var
  LList : TObjectList<TFoo>;
begin
  LList := TObjectList<TFoo>.Create;
  try
    LList.Add( TFoo.Create );
  finally
    FreeAndNil( LList );
  end;
end;
end;

ngott2 4. Aug 2015 10:19

AW: Allgemeine Frage zu Listen.
 
:oops: Er geht doch in den Destructor.

Durch 2 Methoden bei uns im Code die einen fast identischen Namen haben habe ich an der Falschen Stelle debuggt.

Somit ist das Problem nicht mehr vorhanden.

Danke für eure Hilfe...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.
Seite 1 von 2  1 2      

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