AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TRegistry verursacht Memory Leaks?

Ein Thema von blackdrake · begonnen am 5. Sep 2007 · letzter Beitrag vom 5. Sep 2007
Antwort Antwort
blackdrake

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

TRegistry verursacht Memory Leaks?

  Alt 5. Sep 2007, 16: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
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#2

Re: TRegistry verursacht Memory Leaks?

  Alt 5. Sep 2007, 16:08
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
  Mit Zitat antworten Zitat
blackdrake

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

Re: TRegistry verursacht Memory Leaks?

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 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