Это не действительно malloc / free, который вызывает исключение, это «новый», который определенно находится в C ++ части вашего приложения. Похоже, вы предоставляете параметр, который слишком велик для «нового», чтобы выделить.
'std :: bad_alloc' вызывается, например, следующим кодом:
int * p = new int[50000000];
Что говорит backtrace, когда вы загружаете аварийный дамп в gdb?
Если вы не можете сгенерировать дамп, вы можете попросить GDB остановить , когда исключение выдается или перехватывается .
К сожалению, некоторые версии GDB поддерживают только следующий синтаксис:
catch throw
, который позволяет вам прервать приложение, когда выдается любое исключение.
Тем не менее, в справке вы видите, что должно быть возможно запустить
catch throw std::bad_alloc
в более новых версиях.
И не забывайте, что:
(gdb) help catch
- хороший источник другой полезной информации.