On 21/09/2016 09:05, Mark Morgan Lloyd wrote:
Presumably this would be an assertion that something is assigned. A
related test is that an object is a specific subtype before using it
as such
Assert(PageControl1.ActivePage.Controls[0] is TSynEdit);
syn := TSynEdit(PageControl1.ActivePage.Controls[0]);
The problem is that even a test like that would NOT catch all cases.
syn.destroy;
Assert(syn is TSynEdit);
In this case, it is very likely that "syn is TSynEdit" still returns
true. (no assertion thrown)
Simply because "syn.destroy;" does not wipe the memory clean. (depending
on mem manager)
Using -gh
And (optionally) setting the environment HEAPTRC="keepreleased" (that is
for debugging only)
http://www.freepascal.org/docs-html/rtl/heaptrc/environment.html
will help.
On top of that you can use -CR
Also search suspected code for every "destroy" or "free" and, replace
with FreeAndNil(var) if possible.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal