![]() |
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? |
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:
Erst wenn Du das gemacht hast, kannst Du auf FList zugreifen, z.B. im Destruktor mit
FList := TList.Create
Delphi-Quellcode:
.
FreeAndNil(FList)
Das gleiche gilt für dein Hauptprogramm. Erst mit
Delphi-Quellcode:
initialisieren, und später mit
FData := TData.Create
Delphi-Quellcode:
freigeben.
FreeAndNil(FData);
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 |
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? |
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:
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.
if Objekt=nil
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz