Mail Archives: djgpp/1996/01/10/18:01:07
Date: Wed, 10 Jan 1996 14:53:28 -0500 (EST)
From: dunder <dunder AT nyongwa DOT montreal DOT qc DOT ca>
> >Segment violation in pointer 0x00000000 at d8:de81
> >
> >It works fine compiled with TC... Is this error sent by a particular bug
> >en DJGPP or by some 'TC supported' functions or syntax that GCC handles
> >badly? Thanx
>
> You're looking for a bug in the wrong place. The bug isn't in djgpp,
> the bug is in your program. At some point in your program you are
> dereferencing a NULL pointer. Turbo C didn't catch the bug because
> there is no memory protection in real mode. Turbo C will let you smash
> the interrupt table with reckless abandon.
>
> The easiest way to find the bug is to use the debugger. It should be
> able to tell you where the error happened.
>
> Eric
Well actually I doubt i'd trash the interrupt table since we don't assing
anything to it at the beginning, therefor, I guess, it points to *nowhere*
or *anywhere*. The problem we found (after hours of debugging!) is that
TC handles NULL pointers by returning a NULL value when comparing
pointers (ie if(my_pointer) my_pointer[x] = z;) that is, if my pointer is
initialised, give it a value. Else initialize it. Anyway we remade all
the program remodeling the pointer uses and now it works fine with TC and
GCC! (actually much better in GCC ;) ) Thanx all!
Hmm btw, how can we test if a pointer is NULL?!
Just as you did, ie:
if (!my_pointer)
my_pointer = (my_struct_t *)malloc( sizeof (my_struct_t) );
Or BETTER CODE but equivalent:
if (my_pointer == (my_struct_t *)NULL)
...
--
Art S. Kagel, kagel AT quasar DOT bloomberg DOT com
A proverb is no proverb to you 'till life has illustrated it. -- John Keats
- Raw text -