Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden? (https://www.delphipraxis.net/156877-fastmm4-registerexpectedmemoryleak-wie-pointer-heraufinden.html)

Rob09 18. Dez 2010 14:04

FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
 
Hi!

Ich benutze den aktuellen FastMM und möchte gerne Expected Memory Leaks registrieren. Konkret sind es die häufig beschriebenen (z.B. http://www.delphigroups.info/2/11/761098.html) Leaks, die in Delphi6 leider Standard sind.

Dabei würde ich diese gerne mit Hilfe der Funktion
Code:
function RegisterExpectedMemoryLeak(ALeakedPointer: Pointer): Boolean; overload;
registrieren.

Mein Problem: Woher bekomme ich den Pointer??? Ich verstehe es nicht so ganz :-(

Wäre sehr dankbar für eure Hilfe!

Beste Grüße!
Robert

himitsu 18. Dez 2010 15:10

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
 
Der Zeiger gibt das erste Byte an (also den Begin eines Speicherblocks), für welches du die Leckbehandlung abschalten willst.
Delphi-Referenz durchsuchenGetMem, Delphi-Referenz durchsuchenNew und Co. liefern z.B. solche Pointer.

Rob09 19. Dez 2010 15:55

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
 
Okay, danke für die Aufklärung - aber wie bekomme ich denn konkret den Pointer, den ich brauche (d.h. die Pointer auf die erwähnten Lecks)?

rollstuhlfahrer 19. Dez 2010 21:00

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
 
Delphi-Referenz durchsuchenAddr liefert auch solche Pointer. Du musst nur als Parameter das Speicherleck angeben.

Bernhard

Rob09 20. Dez 2010 05:38

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
 
Okay, ich checks grad nicht. Wie gebe ich denn als Paramterer das Speichleck an? D.h. was ist das Speicherleck?

Ich verstehe es so: Wenn ich z.B. weiß, dass ich ein Objekt erstelle, z.B.
Code:
MyObject := TMyObject.Create;
und es nicht mehr freigebe, dann wäre dies mein Speicherleck - oder?

D.h. dann müsste ich quasi sowas wie
Code:
RegisterExpectedMemoryLeak(MyObject);
machen, oder?

Oder müsst es dann eben
Code:
RegisterExpectedMemoryLeak(Addr(MyObject));
heißen?

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...

Vielen Dank für eure Geduld ;-)
Robert

himitsu 20. Dez 2010 06:40

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
 
Delphi-Referenz durchsuchenAddr gibt die Adresse (Pointer) zur Variable und nicht zum Inhalt.
Delphi-Quellcode:
RegisterExpectedMemoryLeak(Addr(MyObject));
registriert also die Variable MyObject,
wärend
Delphi-Quellcode:
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.


Zitat:

Zitat von Rob09 (Beitrag 1069477)
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.

Rob09 21. Dez 2010 15:39

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
 
Jetzt hab ichs verstanden - vielen Dank für die Erklärung und das Beispiel! :thumb:

Schade nur, dass das Problem dann wohl nicht zu lösen ist :(

Schöne Feiertage :xmas: und einen guten Rutsch :party: !
Robert


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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