(gdb) bt
#0 0xf70aea33 in _IO_vfprintf_internal (s=0x0, format=0x8353c98 “%02d-%02d-%04d %02d:%02d:%02d File Opened\n”, ap=0xf31fefa8 “\v”) at vfprintf.c:1311
#1 0xf70b67dc in __fprintf (stream=0x0, format=0x8353c98 “%02d-%02d-%04d %02d:%02d:%02d File Opened\n”) at fprintf.c:32
#2 0x08085c0d in LogFileIO::Open (this=0x84d3b50
只有定义IO_DEBUG的时候,才会做这个null检查。如果没有定义,就不做null的check,就会出现coredump
#ifdef IO_DEBUG
# define CHECK_FILE(FILE, RET) do { \
if ((FILE) == NULL \
|| ((FILE)->_flags & _IO_MAGIC_MASK) != _IO_MAGIC) \
{ \
__set_errno (EINVAL); \
return RET; \
} \
} while (0)
#else
# define CHECK_FILE(FILE, RET) do { } while (0)
#endif
这个导致的原因是两个线程同时使用到了这个stream,一个释放之后,另一个还在用。导致同步问题。