[fpc-pascal] with no if assigned() there are bugs

Martin fpc at mfriebe.de
Wed Sep 21 12:37:43 CEST 2016


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.



More information about the fpc-pascal mailing list