Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TRegistry verursacht Memory Leaks? (https://www.delphipraxis.net/99009-tregistry-verursacht-memory-leaks.html)

blackdrake 5. Sep 2007 15:00


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:
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;
Und das sagt MemProof:

Delphi-Quellcode:
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.
Mach ich hier was falsch?

Gruß
blackdrake

teebee 5. Sep 2007 15:08

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

blackdrake 5. Sep 2007 15:14

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 03:25 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