Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TMS-TAdvStringrid und FastMM4 (https://www.delphipraxis.net/200846-tms-tadvstringrid-und-fastmm4.html)

hoika 31. Mai 2019 10:34

TMS-TAdvStringrid und FastMM4
 
Hallo,

FastMM4 liefert mir folgenden MemLeak.

A memory block has been leaked. The size is: 100

This block was allocated by thread 0x1068, and the stack trace (return addresses) at the time was:

40345A [System][@GetMem]
40546B [System][TObject.NewInstance]
40583A [System][@ClassCreate]
683B52 [BaseGrid.pas][BaseGrid][TCellProperties.Create][1572]
632734 [Grids][TStringSparseList.GetObject]
633235 [Grids][TStringGrid.GetObjects]
6822D8 [BaseGrid.pas][BaseGrid][TBaseGrid.GetCellProperties][801]
6818F8 [BaseGrid.pas][BaseGrid][TBaseGrid.SetObjectEx][569]
41222C [SysUtils][IntToStr]

The block is currently used for an object of class: TCellProperties


der Code ist etwa folgender
Grid.Objects[x,y]:= MyObject;

MyObject ist ein Objekt in einer globalen Liste.

Noch zur Erklärung:
Das TAdvStringGrid benutzt das original Objects intern selbst und biegt einen Zugriff von außen auf CellProperties-Objects ([TBaseGrid.SetObjectEx) um.

Ich habe in der Liste 4 Einträge, CellProperties wird aber 3mal als mem leak bemängelt.


Alles sehr merkwürdig.
Weiß jemand, woran das liegen könnte?

hoika 31. Mai 2019 11:57

AW: TMS-TAdvStringrid und FastMM4
 
Hallo,
sooo.

Lösung:
irgendwo in den Code rein (bei mir ist es der Destructor der Renderer-Klasse).

Delphi-Quellcode:
  for iRow:= 0 to _grid.RowCount-1 do
  begin
    if Assigned(_grid.CellProperties[PObject, iRow].CellObject) then
    begin
      _grid.CellProperties[PObject, iRow].CellObject:= nil;
    end;
  end;


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