Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList mit "verschiedenen Pointern" freigeben (https://www.delphipraxis.net/90813-tlist-mit-verschiedenen-pointern-freigeben.html)

Mattze 24. Apr 2007 10:44


TList mit "verschiedenen Pointern" freigeben
 
Hallo,

ist mir gerade so aufgefallen...
Ich habe eine Tlist und möchte die einmal mit PRecord1 und einmal mit PRecord2 füllen.
Am Programmende (und nicht nur dort) gebe ich die items natürlich frei. Nur, ich weiß da nicht, welcher Precord da gerade drin ist. Das gibt beim Freigeben Probleme, da ich natürlich nicht dispose(PRecord1(Liste[i]) für Pointer vom Typ precord2 machen kann.
Hat jemand einen Tipp für mich, wie man das am günstigsten löst? (Bitte nicht "mit 2 TList"!)

Gruß
Matthias

sirius 24. Apr 2007 10:54

Re: TList mit "verschiedenen Pointern" freigeben
 
Wieso nicht einfach dispose(Liste[i])?

chaosben 24. Apr 2007 10:54

Re: TList mit "verschiedenen Pointern" freigeben
 
Ich über deine Daten (PRecord1, PRecord2) noch ein Record setzen in dem du dir den Typ merkst.

Muetze1 24. Apr 2007 11:03

Re: TList mit "verschiedenen Pointern" freigeben
 
Du hast eine Liste wo du nicht weisst ob Typ 1 oder Typ 2 drin enthalten ist? Da frage ich mich doch: wie arbeitest du denn mit der Liste, wenn du nirgendwo weisst, welcher Typ an welchem Index steht?

Mattze 24. Apr 2007 13:42

Re: TList mit "verschiedenen Pointern" freigeben
 
Hallo,

dispose(Liste[i]) dachte ich auch erst. Ist ja eigentlich auch das Naheliegende. Aber da stürzt er ab.
Bisher habe ich nur gefunden, dass es an den unterschiedlichen Sätzen liegt.
Wundert mich zwar auch, aber was soll man machen...

Ich habe nicht gesagt, dass ich nicht weiß, was in der Liste steht.
Du hast mich aber wahrscheinlich nicht richtig verstanden. In der GANZEN Liste stehen nur Sätze vom Typ1 oder Typ2 - also nur entweder oder für alles! Die Items unterscheiden sich nicht von ihrer inhaltlichen Struktur! Da ich das Programm aber jederzeit beenden kann und die Liste erst unmittelbar vor der nächsten Verwendung lösche - und dann kommt da eben Typ1 oder Typ2 rein - weiß ich beim Beenden nicht, was da gerade drin ist.

An einen "übergeordneten Satz", der auch noch den Typ enthält, habe ich auch schon gedacht. Hätte den Vorteil, dass man die Liste gleichzeitig mit völlig unterschiedlichen Strukturen füllen kann. Aber das ist eigentlich nicht nötig - für jeden Satz.
Vielleicht wäre eine (globale) Variable, die man beim Befüllen der Liste einmal setzt, genug...

Mal sehen...

Gruß
Matthias

sirius 24. Apr 2007 16:44

Re: TList mit "verschiedenen Pointern" freigeben
 
Bei mir stürzt er nicht ab. Warum auch? Dispose bzw Freemem bekommt den Pointer wo dein record liegt und genau davor liegt ein Integer-Wert, der die Größe deines Records beinhaltet. Damit ist beiden Funktionen völlig egal, was für einen Typ du da hast.

Jelly 24. Apr 2007 16:48

Re: TList mit "verschiedenen Pointern" freigeben
 
Nimm eine TObjectList anstatt einer TList. Die gibt ihre Elemente automatisch frei, sobald du die Liste frei gibst.

DGL-luke 24. Apr 2007 16:57

Re: TList mit "verschiedenen Pointern" freigeben
 
... aber keine dynamisch alloziierten records.

Muetze1 24. Apr 2007 23:10

Re: TList mit "verschiedenen Pointern" freigeben
 
...und die Records zu Objekten (was Jelly zwangsläufig mit meinte) machen? Die kann man schliesslich genauso dynamisch alloziieren...

DGL-luke 25. Apr 2007 16:11

Re: TList mit "verschiedenen Pointern" freigeben
 
... geht aber an der TF völlig vorbei (siehe Topic)...

:stupid: :mrgreen:


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