C++ SIGBUS分配失败的原因是什么

C++ SIGBUS分配失败的原因是什么,c++,memory-management,stack,solaris,heap-memory,C++,Memory Management,Stack,Solaris,Heap Memory,我得到一个运行时SIGBUS,调用堆栈如下所示: --- called from signal handler with signal 10 (SIGBUS) --- 001279b8 allocate__t24__default_alloc_template2b0i0Ui (20, 20, 2fa3c0, 32, 0, 0 ) + a4 00117380 __nw__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_al

我得到一个运行时SIGBUS,调用堆栈如下所示:

 --- called from signal handler with signal 10 (SIGBUS) ---
 001279b8 allocate__t24__default_alloc_template2b0i0Ui (20, 20, 2fa3c0, 32, 0, 0
) + a4
 00117380 __nw__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0_3RepUiUi (10, 10, 838e00, 0, 0, 0) + 14
 001173c0 create__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_all
oc_template2b0i0_3RepUi (9, 9, 838e00, 9, 0, 0) + 24
 00117784 replace__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_allo
c_template2b0i0UiUiPCcUi (fbf7f758, 0, ffffffff, fcbf40c2, 9, 80808080) + 114
 0012b988 assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0PCcUi (fbf7f758, fcbf40c2, 9, ffffffff, ffffffff, 20) + 24
 0012a35c assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0PCc (fbf7f758, fcbf40c2, 90, b0, 1ff0, 0) + 24
 00127170 __t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_templ
ate2b0i0PCc (fbf7f758, fcbf40c2, fcbf40b8, 1c00, 9, 7c) + 28
原因可能是什么?
堆栈溢出?或者堆上没有更多的空间?

这几乎可以肯定是在sigbus崩溃的分配之前的某段时间内删除无效的标志。运行valgrind以查看发生了什么。@dasblinkenlight在Solaris/SPARC上不一定为真。通过违反严格的别名,在Solaris/SPARC上也很容易获得
SIGBUS
。对于x86经验丰富的程序员来说,这种情况经常发生,因为SPARC具有x86所没有的实际对齐限制。@安德烈,但您不会在对分配器的调用中获得这些限制。很可能,这是一个损坏的堆。您应该希望您的应用程序具有malloc的调试版本,然后看看会发生什么。无需尝试使用Valgrind。Studio编译器套件附带一个名为
bcheck
的堆检查实用程序。如果Studio编译器套件
man
目录位于
MANPATH
环境变量中,
man bcheck
应该足够开始了。