【发布时间】:2013-10-24 08:44:35
【问题描述】:
我使用 linaro 工具链为 ARM 目标构建了一个 C++ 代码,该工具链专门从 ARM 硬件目标的源代码构建(使用 softfp、mtune=cortex-a9 等...) 有时,代码会因以下跟踪而崩溃。我已将 gdb 附加到正在运行的进程 显然,在调用来自 libstdc++.so.6 的新运算符后,它似乎崩溃了几个调用。
我们目前没有异常处理代码,所以如果 new 失败并抛出异常,我认为它会中止/终止,并显示如下消息:
Program received signal SIGABRT, Aborted.
但它会因 SIGSEGV 而崩溃。
为什么会这样?可能出了什么问题?
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x45c6b460 (LWP 1182)]
0x402fad12 in malloc_consolidate () from /lib/libc.so.6
#0 0x402fad12 in malloc_consolidate () from /lib/libc.so.6
#1 0x402fc498 in _int_malloc () from /lib/libc.so.6
#2 0x402fe414 in malloc () from /lib/libc.so.6
#3 0x401f54d6 in operator new(unsigned int) () from /lib/libstdc++.so.6
#4 0x400f30d4 in MyMsg::operator=(MyPkt*) () from /usr/lib/libmy-ARMV7AL.so
#5 0x400f322c in MyMsg::reply() () from /usr/lib/libmy-ARMV7AL.so
#6 0x0005a6a0 in MyManager::SendMessage (this=0x7188c8)
at MyManager.cpp:12973
#7 0x0004389c in My::Response (this=0x7188c8)
MyManager.cpp:5972
【问题讨论】:
-
您正在某处破坏堆。
MyManager::SendMessage或MyMsg::reply或MyMsg::operator=可能有一些东西。或者它可能是其他东西,很难从堆栈跟踪中分辨出来。 -
@jrok - 感谢您阅读这些链接。
-
在问题中发布 MyManager::SendMessage() 和 My::Response () 的函数定义,我猜可能有助于您回答。
标签: c++ segmentation-fault linaro