![]() |
Memory Leak: Ursache finden
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo.
Bei der Suche nach der Ursache für einen kleinen Memory-Leak, wäre ich sehr dankbar für jedwede Hilfe. Nachdem ich mit "ReportMemoryLeaksOnShutDown := True;" die Nachricht (UexpectedMemoryLeak.jpg) über einen Memory-Leak erhalten habe, aber die Ursache nicht finden konnte, habe ich MadExcept mal ausprobiert. Wie erwartet, gibt es auch einen Leak-Report (LeakReport.jpg) aus dem ich leider auch nicht schlau werde. Wenn ich in diesem Leak-Report auf die im Bild hervorgehobene Zeile im CallStack Doppelklicke, komme ich im meinem Source-Code auf diese Zeile:
Delphi-Quellcode:
Das kann aber doch nicht die Ursache für den Mem-Leak sein, oder?
setlength( fHfgkFarbe, fAnzFarben );
Jemand eine Idee, was man man aus dem MadExcept noch weiter auslesen kann, um die Urasche für den Memory-Leak auf die Spur zu kommen? Vielen Dank Jazzamn |
AW: Memory Leak: Ursache finden
Kann durchaus möglich sein; zb. wenn der Speicher für den Datentyp dieses Arrays dynamisch alloziert wird (wenn es sich zb. dabei um eine Klasse handelt)
|
AW: Memory Leak: Ursache finden
Hallo.
Vielen Dank - aber das kann ich ausschließen: Bei
Delphi-Quellcode:
wird die Länge eines Array of Integer mittles einfachem Integer (fAnzFarben) bestimmt.
setlength( fHfgkFarbe, fAnzFarben );
Steht in ähnlicher Form öfters im Source -- schließe ich somit als Verdächtigen aus. Gruß Jazzman |
AW: Memory Leak: Ursache finden
Inhaltlich kann ich nicht helfen.
Evtl. könntest Du die Trial von EurekaLog versuchen. Vielleicht hilft die ja noch genauer? |
AW: Memory Leak: Ursache finden
Man kann zuerst einmal auch manuell den Code durchscannen, sofern es sich noch um kein allzu umfangreiches Projekt handelt.
Such einfach mal nach ".Create" und "GetMem"/"New" o.Ä. Überprüfe anschließend, ob letzendlich alles allozierte auch zu 100% freigegeben wird. |
AW: Memory Leak: Ursache finden
Zitat:
|
AW: Memory Leak: Ursache finden
Ein kleiner Tipp: durchsuche den gesamten Sourcecode nach "
Delphi-Quellcode:
"; wenn irgendwo der Zusatz "
destructor Destroy;
Delphi-Quellcode:
" fehlt, dann ist das ein potentielles Speicherleck.
override;
Zusätzlich kann man noch nach "destructor T" suchen und prüfen ob in jedem Destruktor auch das
Delphi-Quellcode:
aufgerufen wurde.
inherrited
|
AW: Memory Leak: Ursache finden
Zitat:
Ich dachte schon, dass muß es sein... Dennoch ein guter Tipp! Zitat:
Zitat:
Es sind nicht allzu viele Klassen und Units -- vielleicht mal eine kleine Pause -- und dann mit Kaffee... Vielen Dank euch allen! Jazzman |
AW: Memory Leak: Ursache finden
Versuch mal im destructor der Klasse ein
Delphi-Quellcode:
SetLength(fHfgkFarbe, 0)
|
AW: Memory Leak: Ursache finden
Zitat:
Delphi-Quellcode:
Danke!
destructor TPaletto.Destroy;
begin inherited Destroy; SetLength(fHfgkFarbe, 0); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 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