Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TreeNode Data, New & Dispose mit String (https://www.delphipraxis.net/146804-treenode-data-new-dispose-mit-string.html)

schwa226 27. Jan 2010 08:22


TreeNode Data, New & Dispose mit String
 
Hi,

ich weise einem TreeNode.Data einen Pointer zu:
Delphi-Quellcode:
type
  PDataRec = ^TDataRec; { RecordPointer }
  TDataRec = record { Record for Node-Data }
    Path: string;
    { To be extended }
  end;
Mein Type (ist ein Record weil man weis ja nie ob noch was dazukommt.

Dann erzeuge ich den Child-Node aus einem Stream.
Im Stream steht zuerst die Textlänge. Dann wird anhand der Textlänge der Text vom Stream gelesen:
Delphi-Quellcode:
  var
    ChildNode : TTreeNode;
    TextLength, HasChildren, ImageIndex, SelectedIndex : Integer;
    NodeName : String;
    pData : PDataRec;
      new(pData);
      TreeStream.Read(TextLength, SizeOf(Integer));
      SetLength(pData^.Path, TextLength div 2);
      TreeStream.Read(PWideChar(pData^.Path)^, TextLength);

      //make new child node
      ChildNode:= Tree.Items.AddChild(Node,NodeName);
      ChildNode.ImageIndex := ImageIndex;
      ChildNode.SelectedIndex := SelectedIndex;
      ChildNode.HasChildren := Bool(HasChildren);
      ChildNode.Data := pData;
Bei der OnDeletion Funktion vom TreeView mache ich dann:
Delphi-Quellcode:
Dispose(Node.Data)
Jedoch meldet mit FastMM Unicodestrings, die übrig bleiben.

Schätze einmal, dass es an der Zeile: TreeStream.Read(PWideChar(pData^.Path)^, TextLength); liegen wird, oder?

Neutral General 27. Jan 2010 08:44

Re: TreeNode Data, New & Dispose mit String
 
Mir ist gerade etwas eingefallen, was klappen könnte:

Delphi-Quellcode:
Finalize(PDataRec(Node.Data)^);
Dispose(Node.Data);

schwa226 27. Jan 2010 08:58

Re: TreeNode Data, New & Dispose mit String
 
Super! Danke!

Und weg sind die Mem-Leaks!


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