Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

TRegistry verursacht Memory Leaks?

  Alt 5. Sep 2007, 15:00
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
Daniel Marschall
  Mit Zitat antworten Zitat