Мой стек вызовов показывает следующее:
--- called from signal handler with signal 10 (SIGBUS) ---
001301b8 allocate__t24__default_alloc_template2b0i0Ui (20, 20, 309940, 36, fc55
1a00, 0) + a4
0011dcb8 __nw__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0_3RepUiUi (10, 10, 7773e8, 0, 0, 0) + 14
0011dcf8 create__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_all
oc_template2b0i0_3RepUi (a, a, 7773e8, a, 0, 0) + 24
0011e0bc replace__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_allo
c_template2b0i0UiUiPCcUi (fbcff5c0, 0, ffffffff, fcbf55e2, a, 80808080) + 114
00133ef0 assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0PCcUi (fbcff5c0, fcbf55e2, a, ffffffff, ffffffff, 20) + 24
00132c78 assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0PCc (fbcff5c0, fcbf55e2, 15b0, 15d0, 16f0, 0) + 24
0012f970 __t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_templ
ate2b0i0PCc (fbcff5c0, fcbf55e2, fcbf55d8, fbcff70e, 10, e00) + 28
001f7e0c getFiles__7ListDirb (fbcff8e4, 0, 241000, 0, 4e61a0, ff11f478) + 144
. . .
Означает ли это, что сбой выделения означает, что слишком много памяти занято? Как я могу проверить/отследить увеличение и уменьшение использования памяти, чтобы выяснить, в чем заключается проблема в таких случаях? Могу ли я переопределить allocate__t24__default_alloc_template2b0i0Ui
, т.е. __default_alloc_template<false, 0>::allocate(unsigned int)
, чтобы он вызывал пользовательский вызов выделения?
SIGBUS
почти наверняка вызвано неправильным доступом к памяти. Это может быть вызвано повреждением кучи, которое обычно обнаруживается кодомlibc
в разделеmalloc()
/free()
/ et al, переполнением стека, приводящим к повреждению адреса возврата на недопустимый адрес таким образом, чтоSIGBUS
вместоSIGSEGV
(редко, но бывает) или просто нарушение строгого алиасинга в собственном коде. - person Andrew Henle   schedule 25.08.2017