GTK程序在退出时出现free错误

用GTK写了一个OSD库,编译成.so。主程序使用界面时就调用.so中的方法。
功能都实现了,但是调用exit(0)或者gtk_main_quit退出程序时提示

*** glibc detected *** free(): invalid pointer: 0x080ba0c0 ***
或者
*** glibc detected *** double free()

应该是释放资源时出错,可实在找不到哪里出了问题。

gdb 调试出错的地方在:
where
#0 0xb7fe1424 in __kernel_vsyscall ()
#1 0xb7c89941 in raise () from /lib/libc.so.6
#2 0xb7c8ce42 in abort () from /lib/libc.so.6
#3 0xb7cc1305 in ?? () from /lib/libc.so.6
#4 0xb7ccb501 in ?? () from /lib/libc.so.6
#5 0xb7ccfec6 in free () from /lib/libc.so.6
#6 0xb7ea9441 in operator delete(void*) () from /usr/lib/libstdc++.so.6
#7 0xb7e8bacd in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&) ()
  from /usr/lib/libstdc++.so.6
#8 0x0805d41b in CStdStr<char>::~CStdStr() ()
#9 0xb7c8ea68 in __cxa_finalize () from /lib/libc.so.6
#10 0xb7f0ae74 in __do_global_dtors_aux () from /usr/lib/libGTKOSD.so
#11 0xb7f30a10 in _fini () from /usr/lib/libGTKOSD.so
#12 0xb7ff0d66 in ?? () from /lib/ld-linux.so.2
#13 0xb7c8e69e in ?? () from /lib/libc.so.6
#14 0xb7c8e70f in exit () from /lib/libc.so.6
#15 0xb7c75cef in __libc_start_main () from /lib/libc.so.6
#16 0x08059cf1 in _start ()


在网上找了个方法 export MALLOC_CHECK_=0,这样虽然能屏蔽调打印的语句,但是没有实际上解决这个问题。

不知道谁遇到过?

作者: wdy9927   发布时间: 2011-01-17

仔细检查代码吧,好像没什么好办法。

*** glibc detected *** free(): invalid pointer: 0x080ba0c0 ***
试图free一个不是由malloc得到的指针,比如这样
int i;
free(&i); // invalid pointer

*** glibc detected *** double free()
同一指针free了两次,比如
char p=malloc(100);
free(p);
free(p); // double free

作者: bluejays   发布时间: 2011-01-17