Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme beim Erstellen von TList (https://www.delphipraxis.net/91100-probleme-beim-erstellen-von-tlist.html)

Tiuri 29. Apr 2007 15:44


Probleme beim Erstellen von TList
 
Hi,
ich benutze Delphi3 und habe ein Problem mit TList.
Ich habe einen Typen deklariert, der unter private das Feld FList vom Typ TList hat.
Der Typ ist außerdem so deklariert, dass bei Create FList.Create und bei Free FList.Free ausgeführt werden.
Ich habe ein Test-Programm geschrieben, in der ich eine Instanz Data meines Types benutze.
Bei TForm1.Create wird Data.Create aufgerufen und bei TForm1.Close Data.Free.
Wenn ich das Programm starte und schließe, kommt jedesmal die Fehlermeldung
Zugriffsverletzung bei Adresse 0042B769 in Modul 'test.exe' Lesen von Adresse 00000058.
Wenn ich jedes Vorkommen von FList auskommentiere, kommen diese Fehler nicht. Was muss ich tun?

SirTwist 29. Apr 2007 15:55

Re: Probleme beim Erstellen von TList
 
Hallo Tiuri,

FList.Create ist auch nicht der richtige Aufruf. FList ist ja die Variable, die ist anfangs erstmal undefiniert. Du musst Ihr also einen Wert zuweisen:
Delphi-Quellcode:
FList := TList.Create
Erst wenn Du das gemacht hast, kannst Du auf FList zugreifen, z.B. im Destruktor mit
Delphi-Quellcode:
FreeAndNil(FList)
.

Das gleiche gilt für dein Hauptprogramm. Erst mit
Delphi-Quellcode:
FData := TData.Create
initialisieren, und später mit
Delphi-Quellcode:
FreeAndNil(FData);
freigeben.

Dann sollte es einwandfrei funktionieren.

PS: Schau Dir statt TList mit TObjectList an, bei der Variante musst Du Dich nicht darum kümmern, die einzelnen Einträge in der Liste freizugeben, das geschieht automagisch.

Gruß,
Michael

Tiuri 29. Apr 2007 16:00

Re: Probleme beim Erstellen von TList
 
vielen dank, das ist es gewesen.
Gibt es in delphi 3 auch TObjectList? Ich habs in meiner Hilfe nicht gefunden.
Hat FreeAndNil irgendwelche Vorteile gegenüber Free?

Apollonius 29. Apr 2007 16:53

Re: Probleme beim Erstellen von TList
 
TObjectlist ist bei meinem Delphi in der Unit contnrs. Bei FreeAndNil wird die Objektreferenz auf nil gesetzt, sodass du danach mit
Delphi-Quellcode:
if Objekt=nil
prüfen kannst, ob du eine gültige Instanz hast. Bei free wird zwar die Instanz freigegeben, aber die Referenz zeigt noch in den Speicher, sodass sie nicht nil ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 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