AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MemoryLeak bei VirtualStringtree

Ein Thema von youuu · begonnen am 3. Dez 2012 · letzter Beitrag vom 4. Dez 2012
 
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: MemoryLeak bei VirtualStringtree

  Alt 4. Dez 2012, 17:32
P := Sender.getNodeData(Node);
if Assigned(P) then
Unnütz. Sender.GetNodeData liefert hier nie nil, da weder Node=nil, noch Node=RootNode, noch NodeDataSize=0 ist, denn OnFreeNode wird für diese Konstellation nicht aufgerufen.


Zitat:
P^ := nil; // zur Sicherheit
Zur Sicherheit kann man den Speicherbereich direkt vor der Freigabe auch noch mit Nullen füllen.


Wenn man sich TVirtualNode mal anschaut:
Delphi-Quellcode:
TVirtualNode = packed record
  Index,
  ChildCount: Cardinal;
  // ...
  LastChild: PVirtualNode;
  Data: record end;
end;
dann sieht man, dass Sender.GetNodeData (vereinfacht) @Node.Data zurückliefert und das "P^ := nil" nichts anderes ist, als die 4 bzw. 8 Byte die hinter Data sind mit Nullen zu überschreiben. Und das direkt vor der Freigabe des Speicherbereichs.



**Sorry, hab mich nur gerade über eine viel zu langsame Migration geärgert, die, wenn ordnetlich programmiert, in 3 Minuten erledigt wäre und nicht wie jetzt, die ganze Nacht durchlaufen muss**
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 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