我有一个程序失败了:
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
我想这与 malloc
/free
有关,但我不知道是哪一个。
我可以在 gdb 中设置什么断点来中断错误,以便我可以查看堆栈跟踪?
该程序是 C 和 C++ 的组合,使用 gcc 3.4.2 编译。
最佳答案
导致异常的并不是真正的 malloc/free,它是“新的”,它肯定在您的应用程序的 C++ 部分中。看起来您提供的参数对于"new"分配来说太大了。
'std::bad_alloc' 是由以下代码引起的例如:
int * p = new int[50000000];
当您将崩溃转储加载到 gdb 时,回溯会说什么? 如果不能生成dump,可以要求GDB停止when exception is thrown or caught . 遗憾的是,某些版本的 GDB 仅支持以下语法:
catch throw
它允许您在抛出任何异常时中断应用程序。 不过在help中看到应该可以运行
catch throw std::bad_alloc
在较新的版本中。
别忘了:
(gdb) help catch
是其他有用信息的良好来源。
关于c++ - 如何在 C 语言的 gdb 中调试 St9bad_alloc 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660334/