Addr gibt die Adresse (Pointer) zur Variable und nicht zum Inhalt.
RegisterExpectedMemoryLeak(Addr(MyObject));
registriert also die Variable MyObject,
wärend
RegisterExpectedMemoryLeak(MyObject);
das Objekt selber registriert.
PS: Es wird nur die Objektinstance und nichts Anderes im Objekt Enthaltenes registriert.
Delphi-Quellcode:
var
S: String;
C: TStrings;
ReportMemoryLeaksOnShutdown := True;
S := IntToStr(123456); // damit auch wirklich eine Stringvariable im Speicher erzeugt wird
C := TStringList.Create;
C.Add(S);
RegisterExpectedMemoryLeak(C);
Hier wäre also die TStringList nicht mehr im Log, aber der String im Objekt schon.
Und jetzt nochmal konkret zu den von Delphi 6 standardmäßig erzeugten Lecks - wie handhabe ich es denn da? Da weiß ich ja nicht, wo und wie die erzeugt werden...
Tja, das ist das Problem.
Wenn du nicht an die Variablen rankommst, wo diese "Speicherlecks" verwaltet werden oder an entsprechende Zeiger, dann kannst du dieses nicht registrieren.