GTK程序在退出时出现free错误
时间:2011-01-17
来源:互联网
用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,这样虽然能屏蔽调打印的语句,但是没有实际上解决这个问题。
不知道谁遇到过?
功能都实现了,但是调用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
*** 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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28