On 2017-09-06 09:37, Michael Van Canneyt wrote:
type
TBaseClass = class(TInterfacedObject, IHook)
private
FHook: IHook;
property Hook: IHook read FHook implements IHook;
public
constructor Create;
destructor Destroy; override;
end;
constructor TBaseClass.Create;
begin
FHook := THook.Create; // FPC 2.6.4 reports a memory leak here
end;
destructor TBaseClass.Destroy;
begin
// nothing to do here
end;
You must free FHook here, because you are keeping a reference to the object,
not the interface.
I changed the destructor to the code shown below. Just so you know, I
tried this before I posted the message, and it didn't make any
difference. FHook is a IHook interface reference, not a object
reference. I can't change it either, otherwise FPC gives me a compiler
error on the property ... implements...; line.
destructor TBaseClass.Destroy;
begin
inherited;
FHook := nil;
end;
And the program output gives:
[t1]$ ./project1
THook did it
Heap dump by heaptrc unit
4 memory blocks allocated : 115/120
2 memory blocks freed : 51/56
2 unfreed memory blocks : 64
True heap size : 1114112 (32 used in System startup)
True free heap : 1113696
Should be : 1113760
Call trace for block $000000080072F180 size 32
$0000000000400379 line 35 of project1.lpr
Call trace for block $000000080072F0C0 size 32
Still 2 memory leaks. :-(
Regards,
Graeme
--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/
My public PGP key: http://tinyurl.com/graeme-pgp
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal