Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C中调试gdb中的St9bad_alloc故障?_C++_C_Debugging_Gdb_Bad Alloc - Fatal编程技术网

C++ 如何在C中调试gdb中的St9bad_alloc故障?

C++ 如何在C中调试gdb中的St9bad_alloc故障?,c++,c,debugging,gdb,bad-alloc,C++,C,Debugging,Gdb,Bad Alloc,我有一个程序在以下方面失败: terminate called after throwing an instance of 'std::bad_alloc' what(): St9bad_alloc 我想这与malloc/免费有关,但我不知道是哪一个 我可以在gdb集合中设置哪个断点,它将在错误发生时中断,以便我可以查看堆栈跟踪 程序是C和C++的组合,编译时用GCC 3.4.2. ./P>< P>很可能是由于某些内存被重写而造成的,从而破坏了内存分配系统的状态(通常在内存块返回应用程序

我有一个程序在以下方面失败:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  St9bad_alloc
我想这与malloc/
免费
有关,但我不知道是哪一个

我可以在gdb集合中设置哪个断点,它将在错误发生时中断,以便我可以查看堆栈跟踪


<>程序是C和C++的组合,编译时用GCC 3.4.2. ./P>< P>很可能是由于某些内存被重写而造成的,从而破坏了内存分配系统的状态(通常在内存块返回应用程序之前或之后保持)。

如果你有可能(即,你在x86 Linux上),运行你的程序,它经常能准确地显示出你的腐败发生在哪里。

它不是真正的MalC/C,它导致了异常,它是“新”,它绝对是C++应用程序的一部分。看起来您提供的参数太大,“new”无法分配

“std::bad_alloc”是由以下代码引起的,例如:

 int * p = new int[50000000];
当您将崩溃转储加载到gdb时,backtrace会说什么? 如果无法生成转储,则可以要求GDB停止。 不幸的是,某些版本的GDB仅支持以下语法:

catch throw
它允许您在抛出任何异常时中断应用程序。 但是,在帮助中,您可以看到它应该可以运行

catch throw std::bad_alloc
在新版本中

别忘了:

(gdb)帮助捕获


是其他有用信息的良好来源。

我在尝试读取不存在的文件时遇到过这个问题。。。我试图为文件内容创建一个内部缓冲区,但由于文件不存在,我的缓冲区创建工作就搞砸了

int lenth_bytes;
length_bytes = in_file.tellg();
new char [length_bytes]; // length_bytes hadn't been initialised!!!!
记住,孩子们,总是初始化变量:D并检查零案例。

您的“抛出或捕获异常时”链接是404。