![]() |
TRegistry verursacht Memory Leaks?
Hallo.
Ich will mal nicht gleich behaupten, dass es eine Fehlfunktion ist, doch ich glaube einen Memory Leak bei TRegistry gefunden zu haben. Das Problem besteht bei allen mir bekannten Delphi Versionen. Folgender Code:
Delphi-Quellcode:
Und das sagt MemProof:
uses
Registry; procedure TForm1.Button1Click(Sender: TObject); var reg: tregistry; begin reg := tregistry.create; try reg.RootKey := HKEY_LOCAL_MACHINE; // Abfrage von nicht existierenden Schlüsseln, z.B. // SOFTWARE_X, führt bei allen Delphi Versionen // laut MemProof zu einem Memory Leak, da // auf RegOpenKeyEx kein RegCloseKey folgt. reg.KeyExists('SOFTWARE'); reg.KeyExists('SOFTWARE_X'); reg.OpenKeyReadOnly('SOFTWARE'); reg.CloseKey; reg.OpenKeyReadOnly('SOFTWARE_X'); reg.CloseKey; // Ich führe CloseKey in diesem Test auch aus, wenn OpenKeyReadOnly fehlschlägt finally reg.free; end; end;
Delphi-Quellcode:
Mach ich hier was falsch?
ERROR
711 RegOpenKeyEx(-2147483646,"SOFTWARE_X",0,131081,0): Das System kann di RegOpenKeyEx opens the specified registry key. The returned key handle must be closed with RegCloseKey when no longer needed. 713 RegOpenKeyEx(-2147483646,"SOFTWARE_X",0,131097,0): Das System kann di RegOpenKeyEx opens the specified registry key. The returned key handle must be closed with RegCloseKey when no longer needed. 714 RegOpenKeyEx(-2147483646,"SOFTWARE_X",0,1310811,0): Das System kann di RegOpenKeyEx opens the specified registry key. The returned key handle must be closed with RegCloseKey when no longer needed. 715 RegOpenKeyEx(-2147483646,"SOFTWARE_X",0,1,0): Das System kann die ang RegOpenKeyEx opens the specified registry key. The returned key handle must be closed with RegCloseKey when no longer needed. Gruß blackdrake |
Re: TRegistry verursacht Memory Leaks?
MemProof protokolliert nicht nur die Anforderung und die Freigabe von Ressourcen sondern auch API-Aufrufe, die einen Fehler zurückgeben. So auch in diesem Fall: ein nicht existierender Schlüssel soll geöffnet werden, es resultiert ein Fehler, und der wird angezeigt: ERROR. Dass MemProof gleichzeitig etwas von Freigabe sagt, heisst in diesem Fall nicht, dass etwas nicht freigegeben worden wäre. Ist etwas verwirrend...
Gruß, teebee |
Re: TRegistry verursacht Memory Leaks?
Achso, dann ist ja gut. Das will mir wahrscheinlich das Fragment "Das System kann die ang" sagen. Ich finds irgendwie blöd, dass MemProof die Meldungen abschneidet. Kann man die auch irgendwie komplett anzeigen lassen?
Gruß blackdrake |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 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