我有一个程序失败了,错误信息是:
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
我认为这与malloc
/free
有关,但我不知道是哪一个。在gdb上可以设置什么断点来中断错误,以便我可以查看堆栈跟踪?
该程序是使用gcc 3.4.2编译的C和C ++组合。
这个异常并不是由malloc/free引起的,而是由于你的应用程序中C++部分的"new"导致的。看起来你提供了一个太大的参数给"new"进行分配。
'std::bad_alloc' 可能由以下代码引起:
int * p = new int[50000000];
catch throw
该功能允许您在抛出任何异常时中断应用程序。 然而,在帮助文档中,您可以看到应该可以运行。
catch throw std::bad_alloc
在更新的版本中。
不要忘记:
(gdb) help catch
是获取其他有用信息的好方法。
这很可能是由于某些内存被覆盖而导致的,从而破坏了内存分配系统的状态(通常在返回给应用程序的内存块之前或之后保留)。
如果有可能的话(即您正在使用 x86 Linux),请在Valgrind中运行您的程序,它通常可以准确地显示出发生损坏的位置。
在尝试读取不存在的文件时,我遇到了这个问题……我会尝试为文件内容创建一个内部缓冲区,但由于文件不存在,我的缓冲区创建出了问题。
int lenth_bytes;
length_bytes = in_file.tellg();
new char [length_bytes]; // length_bytes hadn't been initialised!!!!