[Lazarus] Guess the problem with Heap

Martin Frb lazarus at mfriebe.de
Fri Feb 12 20:57:37 CET 2016


On 12/02/2016 19:04, Aradeonas wrote:
> Hi,
> Im working on one of my projects and tried to make a release version, 
> so I used shortcut button in build modes and add release mode but when 
> I compile and run I get SIGSEGV error when main form want to be create.
> After many tries I found out that if I check "Use Heaptrc unit" in 
> project debugging option program will run correctly even it is release 
> mode so there is no debug info.
> So simple :
> If I check that option and use Heaptrc, no problem and if I unchecked 
> it, error .
> Its a old project and I dont remind any code I write about heap so I 
> cant find the problem so I want to ask anyone can guess what code can 
> make such problem?
>

Common candidates are any code that
1) accesses memory behind or before allocatien
   dynArray[-10]  := x
   dynArray[length(dynArray)+10] := x

   foo := TObject.create;
   TChildClass(foo).something ....

   getmem, and then access outside the bounds
   pointer ....

2) any code accessing memory that was freed (any of the above)

-------
and worst of all, the error may or may not be triggered at the time of 
accessing the invalid mem. Sometimes it fails at some other completely 
valid code.

heaptrc changes memory layout as it stores the leaktrace info, and that 
means that by pure luck, the invalid memory access you do, does not 
affect the rest of your data. (or not anything that you detected yet)

A)
compile with heaptrc
and -Criot  and any other flag you can find. Note the LCL does not work 
with -CR (upper R)

set the HEAPTRC environment to "keepreleased"

B)
If you can compile an Linux and run with valgrind.







More information about the Lazarus mailing list