Einzelnen Beitrag anzeigen

LeoDD

Registriert seit: 30. Jul 2003
43 Beiträge
 
Delphi 2010 Professional
 
#1

Speicherleck bei verschachtelten Objekten

  Alt 14. Jan 2009, 13:49
Hallo liebe Delphi Gurus, wieder einmal verzweifel ich obwohl die Lösung sicher ganz nah ist.

Ich verwende mehrere Listen (TObjectList) und Ableitungen von TObjectList.

Das sieht zum Beispiel so aus:

Delphi-Quellcode:
TTC7AutoStart = class(TObjectList)

    public
      IconCache: TTC7IconCache;
      Statistic: TTC7AutoStartStatistic;
      AutostartLocations: TObjectList;
Hier noch die Deklarationen von Iconcache:

TTC7IconCache = class(TObjectList) Statistic ist ein einfacher Record.

Seit kurzem verwende ich EurekaLog um Speicherlecks zu finden. Mit Hilfe dieses Tools konnte ich bereits einige Speicherleichen beseitigen. Aber bei den TObjectLists bzw. den Ableitungen bekomme ich graue Haare.

Ich instanziiere TTC7Autostart im OnCreate Ereignis des Hauptformulars:

Delphi-Quellcode:
procedure TASManForm.FormCreate(Sender: TObject);
{
  CREATE
}

begin

  ...

  Autostarts := TTC7AutoStart.Create;
  IconUnknown:= TIcon.Create;
Im OnDestroy Ereignis will ich alles Erzeugte dann wieder freigeben:

Delphi-Quellcode:
procedure TASManForm.FormDestroy(Sender: TObject);
begin
  Autostarts.Free;
  IconUnknown.Free;
end;
Ich bekomme allerdings jedesmal eine Zugriffsverletzung bei der Freigabe der Autostarts. Laut CPU Ansicht ist das Objekt gar nicht mehr vorhanden, es scheint an anderer Stelle bereits freigegeben zu sein. Ich habe jedoch keine manuelle Freigabe vorher vorgenommen.

Wie gehe ich mit den TObjectLists in einer Ableitung von TObjectList um? Wo muss diese freigegeben werden?

Ebenso zeigt mir Eurekalog auch für das IconUnknown ein Speicherleck an, obwohl ich es doch in OnDestroy wieder freigebe.

Habe ich einen Denkfehler? Sollte ich solche Form-globalen Objekte anders instanziieren und verwenden?
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.
  Mit Zitat antworten Zitat