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

Reply via email to