[fpc-pascal] Problem with heaptrc

Tomas Hajny XHajT03 at hajny.biz
Sun Nov 9 15:05:20 CET 2014


On 9 Nov 14, at 21:58, Xiangrong Fang wrote:


Hi Xiangrong,

> I use heap trace utility to see if there are memory leak in my program.
> The source is here:
> 
> https://github.com/xrfang/fpcollection/blob/aefa04f0374c94298facd8d57d4a25dafe10b753/src/demos/cache/demo.lpr
> 
> My problem is, at the beginning of the main program, I have a costant
> definition:
> 
> const
>   ITEM_COUNT = 5000000;
> If I set ITEM_COUNT to a small value, say 50 or 5000, everything is OK, no
> memory leak. But with the above value, it will cause HEAPTRC to fall in an
> endless loop, generating messages like:
> 
> Call trace for block $00007F41693AA680 size 40
>   $000000000040071F line 29 of demo.lpr
>   $0000000000400180
> 
> While line 29 is this:
> 
> 27  for i := 0 to ITEM_COUNT - 1 do begin
> 28    for j := 0 to 4 do key[j] := $deadbeef + i + j;
> 29    h.Add(@key, SizeOf(PtrUInt) * 5, Pointer($deadbeef + i));
> 30  end;
> Could anyone tell me why heaptrc will fall in an endless loop, and does my
> program have memory leak?

Are you sure that it really is endless (i.e. did you let to run for a 
sufficiently long time)? If you increase the amount of allocated 
blocks (which is what happens in case of increasing your constant), 
traversing through all the blocks (especially if they are not freed 
at the end) may indeed take fairly long time...

Tomas




More information about the fpc-pascal mailing list