Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speicherbereinigung von Strings (https://www.delphipraxis.net/95899-speicherbereinigung-von-strings.html)

DGL-luke 17. Jul 2007 13:56

Re: Speicherbereinigung von Strings
 
öhm...

Delphi-Quellcode:
PStringContainer = ^TStringContainer;
TStringContainer = record
  s: string;
end;

//string "sichern"
New(MyPStringContainer);
MyPStringContainer.s := 'bla';
//und dann record in ne liste packen.

//string freigeben
Dispose(MyPStringContainer);
soltle das nicht reichen?

3_of_8 17. Jul 2007 14:00

Re: Speicherbereinigung von Strings
 
Ja, aber dann könnte man sich den Record schenken und gleich nen String nehmen.

alzaimar 17. Jul 2007 14:13

Re: Speicherbereinigung von Strings
 
Meine Hashmap speichert Pointer, und da wollte ich DGL-Luke's Version nehmen.

Tyrael Y. 17. Jul 2007 14:58

Re: Speicherbereinigung von Strings
 
Delphi-Quellcode:
type
  PRecordType = ^TRecordType;
  TRecordType = record
    Name: string;
    Bla: string
  end;

procedure Test();
var LRec: PRecordType;
begin
  New(LRec);
  try
    LRec.Name := 'Name';
    LRec.Bla := 'BlaBla';
   
    MachWas(LRec);
  finally
    LRec.Name := '';
    LRec.Bla := '';
    Dispose(LRec);
  end;
end;

...probiert es aus

alzaimar 17. Jul 2007 15:36

Re: Speicherbereinigung von Strings
 
Zitat:

Zitat von Tyrael Y.
...probiert es aus

Wozu sollte man die Strings zum Schluss auf '' setzen? Und wozu sollte man das ausprobieren?

Tyrael Y. 18. Jul 2007 08:41

Re: Speicherbereinigung von Strings
 
Hm, sry ist wohl doch nicht so wie ich es mir gedacht habe...hab es jetzt selbst nochmal gestestet und in diesem Fall entsteht kein Leak.

Wieso ich auf diese Idee gekommen bin....beim VirtualStringTree erzeugen Strings in einem PNodeData einen Memory Leak, wenn sie nicht im OnFreeNode auf leer gesetzt werden.
Meine Annahme war, weil ich sehr viel mit dem VST arbeite, daß es bei Strings in Records immer so ist. Ein Test zeigte mir das Gegenteil. Es entstehen keine Leaks. Beim VST liegt es wohl daran, daß der Record untypisiert ist.

Gruß T.

himitsu 18. Jul 2007 13:47

Re: Speicherbereinigung von Strings
 
Zitat:

Zitat von Tyrael Y.
Beim VST liegt es wohl daran, daß der Record untypisiert ist.

genau so ist es, denn woher sollte sollte VST denn wissen was du in dem Record speicherst?
VST bekommt ja vom Inhalt und dessen Typen nichts mit ... du kastest den Typ ja auch erst außerhalb des VST.

aber das ist überall so, wo der Typ nicht direkt angegeben ist und wo dieses dann nicht explizit bei der Freigabe beachtet wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr.
Seite 3 von 3     123   

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