Mail Archives: djgpp/1998/02/07/00:28:29
At 08:16 2/5/1998 -0800, Charles Terry wrote:
>David Mikesell wrote:
>>
>> ...I'm also using Allegro 3.0
>>
>> >
>> > I'm using djgpp 2.01 on dos 6.22 and am trying to work through
>> > a particularly nasty seg fault bug. I will purposely keep
>> > the problem statement general here, but will be happy to
>> > drill down to the source if nobody can point me in the right
>> > direction to begin looking.
>> >
>> > I get the seg fault immediately after returning from a function
>> > that allocates memory...I can't seem to narrow the bug down to
>> > an offending pointer reference or a free() of a NULL pointer, etc.
>> > None of the malloc()'s returns a NULL pointer. Any ideas
>> > on where to start looking?
>> >
>> > --
>If you crash on a return from malloc chances are that malloc is
>overwriting the stack. This situation can occcur when another part of
>your own code overwrits part of mallocs internal tables. Its a tough
>bug because the overwrite could have happend somewhere that seems
>totally unrelated.
>My own solution to this was to get the malloc source and compile it with
>debugging on. Then step through it at the point of the error and check
>the "bucket" it uses for not pointer type values. Then get the address
>of the corupted value and put a watch on it and restart and step thru
>the program again watching fo when the pointer is overwritten.
>Sorry for such a complex answer but hope it helps.
Incidentally, if you do this, you can also compile `malloc' with `RCHECK'
defined. This includes some sanity checking in `malloc'/`free', like magic
number that verify the pointer you `free' was `malloc'ed, and that you
haven't overwritten its bounds.
There are various packages which replace/wrap `malloc' and check for such
errors, as well as others. One is called Fortify.
Nate Eldredge
eldredge AT ap DOT net
- Raw text -