![]() |
AW: Memory Leak: Ursache finden
Zitat:
Grüße Klaus |
AW: Memory Leak: Ursache finden
Und so?
Delphi-Quellcode:
destructor TPaletto.Destroy;
begin SetLength(fHfgkFarbe, 0); fHfgkFarbe := nil; inherited Destroy; end; |
AW: Memory Leak: Ursache finden
Ein Array (dynamisch oder statisch) muss nicht freigeben werden. Das ist also mal nicht der Grund.
Delphi-Quellcode:
(ganz alleine für sich) ist auch eher ein Hinweis auf einen mit
Unknown
Delphi-Quellcode:
/
GetMem
Delphi-Quellcode:
allozierten Speicher-Bereich.
AllocMem
Sourcen möchtest du aber wohl hier nicht reinstellen? Dann wird es schwierig, denn so ist das ein Blindflug |
AW: Memory Leak: Ursache finden
Zitat:
Zitat:
Delphi-Quellcode:
/
GetMem
Delphi-Quellcode:
nutze ich nicht.
AllocMem
Sourcen wären im Prinzip überhaupt kein Problem -- aber es ist doch einiges an Code, und das wäre wirklich nicht ok, euch meinen Fehler im meinem Code suchen zu lassen. Sehr lieb! Ich werde morgen einfach mal eine große Auskommentierungsaktion starten und mal systematisch rang gehen. Ich bin nur ein wenig enttäuscht von MadExcept, so dass es mir wirklich gar kein Hinweis geben konnte. Ist technisch aber sicher auch nicht ganz einfach. Vielen Dank an alle - super Truppe :thumb: Gruß Jazzman |
AW: Memory Leak: Ursache finden
StrNew(), ReallocMem() ???
Ist dein Project irgendwie FPC portable? Hier ist FPC Meilen vorraus mit deren HeapTracing. Hier kann man fast ganz exakt festsetellen, wo die MemLeaks "offen" bleiben und deren Ursache ergründen. Benutzt du noch eine Ansi-Delphi? Dann könnte die MemCheck.pas genauere Infos geben.. |
AW: Memory Leak: Ursache finden
Gibst Du das TPaletto Objekt denn überhaupt frei?
|
AW: Memory Leak: Ursache finden
Zitat:
|
AW: Memory Leak: Ursache finden
Problem gelöst! :-D
Wie schon alle Tools (und auch eure Hinweise) daraufhin deuteten, hing der Memory Leak mit dem Array of Integer zusammen:
Delphi-Quellcode:
Das Array wurde anschließend überhaupt nicht benutzt (stammt noch aus einer vorherigen Version), und genau diese Zeile sorgte für den Memory-Leak. Eine Recherche in einschlägigen Foren brachte dann auch den Hinweis, dass ein FillChar zum Initialisieren von Arrays nur mit Vorsicht zu benutzen ist.
FillChar( fHfgkFarbe, SizeOf( fHfgkFarbe ), 0);
Wenn ich nun das Array manuell mit Nullen initialisiere ist alles ok. Wäre ja schon schön, wenn man eine "sichere" Methode hätte, Arrays mit Nullen zu füllen, wenn man schon FillChar nur unter bestimmten Umständen nutzen kann. Aber das Problem ist gelöst, und ich danke allen Helfern! Gruß Jazzman |
AW: Memory Leak: Ursache finden
Schön dass Du es gefunden hast. Initialierung bei einem dynamischen Array of integer wäre ja wohl eher:
Delphi-Quellcode:
FillChar( fHfgkFarbe, SizeOf(Integer) * Length(fHfgkFarbe), 0);
|
AW: Memory Leak: Ursache finden
Variablen vom Typ eines dynamischen Arrays sind Zeiger auf den Speicher in dem die Array-Elemente liegen.
Delphi-Quellcode:
Das ist falsch, so wird der Zeiger selbst überschrieben, nicht der Inhalt des Arrays.
FillChar(fHfgkFarbe, {...}
Richtig so:
Delphi-Quellcode:
if Length(fHfgkFarbe) > 0 then
FillChar(fHfgkFarbe[0], SizeOf(fHfgkFarbe[0]) * Length(fHfgkFarbe), 0); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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