Autor Beitrag
gispos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: Do 13.12.07 21:24 
Es ja möglich einem TList-Item einfach einen Integeren Wert oder auch eine Variable als Pointer zuzuweißen.
Jetzt meine Frage:
Entsteht hierdurch beim einfachen löschen der TList durch Clear ein Speicher-Leak?
Was ich mir gut vorstellen könnte, da die zugewiesenen Pointer wohl nicht wieder gelöscht werden. Oder beziehen sich die Pointer auf die schon eigenen TList.Items, die ja schon Pointer sind, und die werden ja bei TList.Clear aus dem Speicher entfernt.

Und da währe auch noch die Frage wie stabil diese Integeren Pointer sind, in einem älterm
Project hatte ich davon ((exsesiv)wie schreibt sich das nur?) Gebrauch gemacht, und nie Probleme gehabt.

Gruß gispos


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Do 13.12.2007 um 22:08
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 13.12.07 22:09 
Moin!

Du kannst eine TList als array of Pointer betrachten, wenn es um "Eigentumsrechte" geht. :idea: Ich denke, das sollte es erklären. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
gispos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: Do 13.12.07 22:55 
Fast, stimmt schon das mit dem Array of Pointer, aber der Pointer des Array weist doch auf
einen Wert oder auch Adresse hin. (Pointer auf Variable?)
Beansprucht dieser Wert keinen extra Speicher? Es wird doch nur der beanspruchte
Speicher des Pointer entfernt (4 Byte). Was denn wenn ich Pointer(Int64) zuweiße?
Oder habe ich hier einen Denkfehler? :roll:

Nachtrag:
Hab’s gerade mal getestet. Einem Pointer oder auch Item lässt sich max. Cardinal zuweisen,
also genau der belegte Speicher des Pointer. Lässt also darauf schließen, dass der Speicher der Zuweißung auf den Pointer entfernt wird.

Gruß gispos
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 15.12.07 09:12 
Wenn du keinen Speicher alloziert hast, musst du ihne auch nicht wieder freigeben... Wenn du den Integer nur zu Pointer castest und diesen zuweist, musst du nichts weiter tun. Allozierst du jedoch Speicher und weist den Pointer darauf dem Listeneintrag zu, dann musst du ihn auch wieder freigeben.
Anders mit Objekten und TObjectList (wenn entsprechend initialisiert).