From: Nathan I. <rb...@us...> - 2002-10-18 22:41:05
|
On Fri, Oct 18, 2002 at 04:17:05PM -0600, S. Anderson wrote: > 1970 if (b->bits.file) > (gdb) printf "%s\n" , b->bits.file > > (gdb) n > 1971 free(b->bits.file); > (gdb) n > > ElectricFence Aborting: free(4268ffa0): address not from malloc(). > > Program received signal SIGILL, Illegal instruction. > 0x402f4711 in kill () from /lib/libc.so.6 > (gdb) > > this is weird, "b->bits.file" seems to contain nothing here but > it still passes the test "if (b->bits.file)" > > any ideas why this is happening? > > thanks, > sa It probably has an old value in it still. So there's a invalid pointer, but it's not NULL. It just points to some non-printable character, or \0. The statement: if (b->bits.file) free(b->bits.file); Should be replaced with: IF_FREE(b->bits.file); But the problem may be coming from somewhere else too. -- ---------------------------------------------------------------------------- | Nathan Ingersoll \\ Computer Systems & Network Coordinator | | http://atmos.org/~ningerso/ \\ Minnesota Center for Rural Health | | mailto: nin...@ru... \\ http://www.ruralcenter.org | ---------------------------------------------------------------------------- |