问题标签 [bad-alloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2660 浏览

c++ - c++ stl优先队列插入bad_alloc异常

我正在研究一个查询处理器,它从内存中读取长长的文档 ID 列表并查找匹配的 ID。当它找到一个时,它会创建一个包含 docid(一个 int)和文档的排名(一个 double)的 DOC 结构,并将其推送到优先级队列中。我的问题是,当搜索的单词有很长的列表时,当我尝试将 DOC 推送到队列时,出现以下异常: QueryProcessor.exe 中 0x7c812afb 处的未处理异常:Microsoft C++ 异常:std: :bad_alloc 在内存位置 0x0012ee88..

当单词有一个简短的列表时,它可以正常工作。我尝试在代码中的多个位置将 DOC 推送到队列中,它们都可以工作到某一行;之后,我收到上述错误。我完全不知道出了什么问题,因为读入的最长列表小于 1 MB,并且我释放了我分配的所有内存。当我尝试将 DOC 推送到有容量容纳它的队列上时,为什么会突然出现 bad_alloc 异常(我使用了一个保留了足够空间的向量作为优先级队列的底层数据结构)?

我知道如果不看所有代码几乎不可能回答这样的问题,但是在这里发布太长了。我正在尽我所能,并焦急地希望有人能给我一个答案,因为我无能为力。

NextGEQ 函数逐块读取压缩的 docid 块列表。也就是说,如果它发现块中的 lastdocid(在一个单独的列表中)大于传入的 docid,它会解压块并搜索,直到找到正确的。每个列表都以关于列表的元数据开始,其中包含每个压缩块的长度和块中的最后一个 docid。data.iquery 指向元数据的开头;data.metapointer 指向元数据中函数当前所在的位置;并且 data.blockpointer 指向未压缩 docid 块的开头,如果有的话。如果它看到它已经解压缩,它只是搜索。下面,当我第一次调用该函数时,它解压了一个块并找到了docid;之后推送到队列中。第二次,它没有 甚至需要解压;也就是说,没有分配新的内存,但在那之后,推送到队列会产生一个 bad_alloc 错误。

编辑:我清理了我的代码,以便它应该编译。我还添加了 OpenList() 和 NextGEQ 函数,虽然后者很长,因为我认为问题是由其中某处的堆损坏引起的。非常感谢!

非常感谢,bsg。

0 投票
1 回答
935 浏览

c++ - Mergesort - 尝试分配向量时抛出 std::bad_alloc

女士们先生们,下午好。所以,这不是我犯错误的日子。在 C++ 中实现 Mergesort(不是就地),我在代码上遇到了真正的麻烦,不知道为什么。函数的倒数第二行将 的mergeSort()结果分配给merge()整数向量result。这一行(实际分配,而不是函数)会引发bad_alloc错误,我不知道为什么。

互联网表明这bad_alloc主要是由于内存不足错误而引发的,但情况并非如此,因为它第一次被调用是在 500 个整数的向量上,这应该远不及太多内存(那是什么,比如2 Kb 在 32 位整数上?)。我假设我在为 C++ 做一些愚蠢和不正确的事情,但我不知道是什么。我尝试调用what()异常,但这只是返回它的名称。编码:

如果我重新编写merge函数以仅在函数期间对其进行引用result和编辑,它可以正常工作,但我想让代码尽可能接近为合并排序提供的“标准”伪代码。

我感谢任何帮助,谢谢。

0 投票
4 回答
24397 浏览

c++ - 手动抛出 std::bad_alloc 可以吗?

我有这个代码..

我省略了大部分不相关的信息,但我认为这里的图片很清楚。

是否可以手动抛出 std::bad_alloc 而不是单独尝试/捕获所有层创建并在重新抛出 bad_alloc 之前记录?

0 投票
2 回答
828 浏览

c++ - 如果抛出 std::bad_alloc,new 是否将指针设置为 NULL?

我知道如果失败,new(std::no_throw)将设置指针。NULL我也知道如果失败,正常new会抛出异常。std::bad_alloc

如果抛出,法线new也会设置指针吗?NULL还是我应该将其设置NULLcatch()块中?

0 投票
3 回答
960 浏览

c++ - 在类 Texture 上调用 new 时的 bad_alloc

这是违规行:

Texture *texture = new Texture (...);

我在这里从 bad_alloc 收到:

大小约为 28 字节

到目前为止,该程序已经在 32 位系统的堆上放置了大约 2 MB(重新启动),在此之前只有大约 20 个东西被分配在堆上,所以我知道没有堆损坏。

我很混乱...

0 投票
5 回答
1723 浏览

c++ - 派生类的 C++ 数组与派生对象的基类指针数组 - 为什么分配的内存量如此不同?

我需要澄清一个我不太明白的问题。使用以下两种情况,我会认为分配的内存量大致相同。但是,场景 2bad_alloc在一段时间后给了我一个异常,并且似乎在疯狂地消耗内存(使用 Window 的任务管理器作为分配给进程的内存量的代理)。以下是在 Windows 32bit 上使用 MSVC10 编译的。

假设我有以下基类:

现在,至于派生类:

现在考虑两种情况。首先,分配一个 Derived 类的动态数组并用 Derived 对象填充它,即:

其次,分配 Base 类的动态指针数组,并让它们指向 Derived 类的实际实例,即:

在任一情况下,我都将 SOME_LARGE_NUMBER 设置为 40,000,000。在第一个场景中,程序完成得很好——在第二个场景中,我得到了一个 bad_alloc 异常。我想知道这是否是预期的行为,或者我是否在这里忽略了某些东西?如果是这样,这样做的更好方法是什么?请注意,我使用vector<Base<int>*>and遇到了同样的问题boost::ptr_vector<Base<int>>

0 投票
1 回答
2351 浏览

c++ - 向 std::vector 添加结构时的 std::bad_alloc

这可能是愚蠢的,但我无法弄清楚。我std::bad_alloc在以下代码片段中遇到异常(这是 switch 中的 case 语句):

哪里TheStack是类型MyStack,这是一个typedef std::vector<MyStackItem> MyStack;

MyStackItem是一个简单的结构,看起来像这样:

至于MyNodenad MyPrimitiveNode,它们来自另一个项目(静态库),定义如下:

希望这是所有需要的相关信息。我知道 MyStackItem 只做一个浅拷贝,这就是我想要的。不要担心泄漏,那是在其他地方处理的。

有人可以告诉我发生了什么,我该如何解决?谢谢。

编辑:发布堆栈跟踪可能会有所帮助:

0 投票
2 回答
2198 浏览

c++ - MySQL C++ 连接器内存溢出错误

我一直在尝试使用 MySQL/C++ 连接器包连接到我自己的本地托管 MySQL 数据库。真正给我带来问题的行是:

击中两行中的第二行会给我一个内存分配错误。这是调试器的读数。

我真的不确定我做错了什么。我认为它可能是 Connection 指针本身,所以我尝试将其转换为您现在看到的 auto_ptr。同样的错误。我已经为连接函数尝试了不同的参数,但这似乎也不是问题。任何人都可以解释为什么我在程序中这么早就遇到内存泄漏问题吗?

0 投票
2 回答
1680 浏览

c++ - std::bad_alloc 没有被任何调用堆栈帧捕获

如果 new 运算符未能分配内存,则只有当我在 new 语句周围放置一个 try-catch 块时,才会捕获异常 std::bad_alloc 。如果我在下面几个堆栈帧的调用者中有 try-catch 块,它不会在那里被捕获,并且我会遇到异常的程序终止。为什么会这样?这是在 Microsoft Visual Studio 2008 上。

编辑:好的,这是不工作的代码。下面的函数是我调用新函数的地方,下面的函数是它下面的堆栈帧。最后一个函数是我有 catch 子句的地方,但它没有在那里被捕获。

此外,我捕获 bad_alloc 时的堆栈帧(在新语句周围的 catch 子句中)在这里:http ://s289.photobucket.com/albums/ll211/spiderman2_photo_bucket/?action=view¤t=bad_alloc.jpg

0 投票
3 回答
4952 浏览

c++ - 为什么这会产生 bad_alloc 错误?

目前,我正在尝试为 Student 设置一个成员函数,该函数从 cin 读取字符串,用作该函数的参数,然后使用数据创建一个 Student 对象。但是,它是否给了我一个 bad_alloc 错误。我知道该函数正在获取字符串,但在创建新对象后会出现此错误。

错误:

构造函数:

功能:

测试学生.cpp: