Strange std::bad_alloc
Strange std::bad_alloc
据我所知,可以抛出std :: bad_alloc的三个原因:
- 该过程要求的内存比可以使用的内容更多
- 地址空间太分散了,无法为大部分连续内存的要求提供请求
- 堆管理数据架构已损坏
我们的代码属于std :: bad_alloc,但是上述原因似乎都不适用。该数据架构是存储为std ::顶点列表的图表,每个顶点再次存储一个std ::它是其一部分的边缘的列表以及一定数量的连续数据。
对于小图(< = 100'000顶点),该程序的运行良好,无论每个顶点的数据部分的大小多大(我们总共可以分配40 GB)。但是,如果顶点的数量变大,那么即使在使用"仅" 8 GB内存的实例上,我们都会得到一个std :: bad_alloc异常。
由于在较大的块中分配更多记忆时没有问题。在某些部分中,我们以一种非常容易出错的方式来处理指针,因此我们可能会破坏Heap数据架构。但是,当在较小的实例上运行时,Valgrind的Memcheck将我们的代码完美无瑕,因此原因似乎也不太可能(在投掷实例时,Valgrind本身就耗尽了内存,因此我们无法直接检查该情况)。
有什么想法对这种行为的原因还有什么,或者我们可能会进行哪些测试以进一步解决问题?
OS:Fedora 19
构建系统:带有GCC 4.8.2
我无法在您的帖子上发表评论,所以我将其回复。
我在使用Kaldi(与您的GCC相同的系统和GCC)时遇到了同样的问题。我没有跟踪此问题的确切来源,但是似乎内核3.12是这里的问题。我启动了其中一个备用内核(3.11系列之一),问题已经消失了。
您可以使用:
yum list --showduplicates kernel
找到可用的3.11内核。
编辑:
看来,此错误已固定在内核3.12.11-201和3.13
中来源:bugzilla
相关文章:
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 组件对象模型 (COM):IMalloc::Alloc 在哪里分配内存?
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?
- 将 lambda 传递给 STL 集时出错"bad function call"
- 新的 C++14 位分隔符处"Bad Character" Eclipse Oxygen 错误
- 使用 #define 被认为是"bad practice"吗?
- "400 Bad request"使用 OpenSSL BIO 进行请求时
- CGAL:Hausdorff距离不良Alloc
- 解密文件AES_256_CBC返回"bad decrypt"错误
- 在C++流中,eof(),fail(),bad()和good()有什么区别
- C STD ::初始化类对象中的Alloc错误错误
- make / gcc:"bad build"的可能原因是什么?
- 什么是地址0xbaddc0dedeadbead "Bad decode dead bead"
- 在多线程环境中,什么可能导致"bad file descriptor"?
- 尝试解决HackerBank上的BFS挑战时出现错误的alloc异常
- "std::vector"在调整大小时引发"bad allocation"异常
- 尝试使用 execp、dup2 和管道实现 shell,挂起或"bad file descriptor"