免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3794 | 回复: 3
打印 上一主题 下一主题

multimap clear操作引起bus error [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-31 15:59 |只看该作者 |倒序浏览
在solaris sparc平台上,定义multimap<CDrKey,string>,当执行clear()的时候,在stl_tree.h的_S_right处出错,导致程序core掉,属于字节对齐问题,地址最后一位为1(每次core的时候地址最后一位都是奇数),运行时,并不是每次都会core,可能几天出现一次,几百万次会出现一次bus error的错误,有没好的办法解决?
      static _Link_type
      _S_right(_Base_ptr __x)
      { return static_cast<_Link_type>(__x->_M_right); }

Program terminated with signal 10, Bus error.
[New process 151312    ]
[New process 85776    ]
#0  0x00042734 in std::_Rb_tree<CDrKey, std::pair<CDrKey const, std::string>, std::_Select1st<std::pair<CDrKey const, std::string> >, std::less<CDrKey>, std::allocator<std::pair<CDrKey const, std::string> > >::_S_right (__x=0x39323031)
    at /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.10/4.1.1/../../../../include/c++/4.1.1/bits/stl_tree.h:501
501     /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.10/4.1.1/../../../../include/c++/4.1.1/bits/stl_tree.h: No such file or directory.
        in /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.10/4.1.1/../../../../include/c++/4.1.1/bits/stl_tree.h
(gdb) bt
#0  0x00042734 in std::_Rb_tree<CDrKey, std::pair<CDrKey const, std::string>, std::_Select1st<std::pair<CDrKey const, std::string> >, std::less<CDrKey>, std::allocator<std::pair<CDrKey const, std::string> > >::_S_right (__x=0x39323031)
    at /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.10/4.1.1/../../../../include/c++/4.1.1/bits/stl_tree.h:501
#1  0x00043c98 in std::_Rb_tree<CDrKey, std::pair<CDrKey const, std::string>, std::_Select1st<std::pair<CDrKey const, std::string> >, std::less<CDrKey>, std::allocator<std::pair<CDrKey const, std::string> > >::_M_erase (this=0xfcb7fc00, __x=0x39323031)
    at /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.10/4.1.1/../../../../include/c++/4.1.1/bits/stl_tree.h:1264
#2  0x00043e28 in std::_Rb_tree<CDrKey, std::pair<CDrKey const, std::string>, std::_Select1st<std::pair<CDrKey const, std::string> >, std::less<CDrKey>, std::allocator<std::pair<CDrKey const, std::string> > >::clear (this=0xfcb7fc00)
    at /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.10/4.1.1/../../../../include/c++/4.1.1/bits/stl_tree.h:692
#3  0x00043eb0 in std::multimap<CDrKey, std::string, std::less<CDrKey>, std::allocator<std::pair<CDrKey const, std::string> > >::clear (this=0xfcb7fc00)
    at /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.10/4.1.1/../../../../include/c++/4.1.1/bits/stl_multimap.h:461
#4  0x000254d0 in CFileContent::clear (this=0xfcb7fc00)

论坛徽章:
0
2 [报告]
发表于 2011-12-31 16:03 |只看该作者
我也遇到过类似的问题的,arm平台,好像是dbus里面的,程序直接把一个char变量强制转换成init类型来处理了。然后就sigbus了。

找到出错的地方,把类型改了就ok了。

论坛徽章:
0
3 [报告]
发表于 2011-12-31 16:14 |只看该作者
blake326 发表于 2011-12-31 16:03
我也遇到过类似的问题的,arm平台,好像是dbus里面的,程序直接把一个char变量强制转换成init类型来处理了。 ...


主要是调用stl的multimap的clear()函数,都是stdc++的东西,是否有其他方式可以解决。

论坛徽章:
0
4 [报告]
发表于 2011-12-31 16:22 |只看该作者
回复 3# tchhyc


    我很久不搞c++了,但是我觉得本身stl应该没有问题的,应该先找出你问题出的原因,或许是你的数据本身就被破坏了(几率很小),然后map clear的时候就刚好失败了。刚好符合你这种几天才出一次的状况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP