[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