C++中的内存错误

C++中的内存错误,c++,memory-management,core,dump,C++,Memory Management,Core,Dump,我的代码内存要求很高,这句话重复了很多次: Node** x; x = new Node*[11]; 它在此分配时失败。我通过将输出发送到控制台来解决这一问题 我正在Visual Studio上构建代码。在VS2005和VS2008中,它都可以在调试模式下正常工作 但是,它在VS2005发布模式下抛出错误。 从中生成的直接exe 如果cl来自VS2010,则cl Program.cpp有效,但如果cl来自VS2005,则会失败。 有什么线索吗 PS:Linux给了我一个总线错误内核 谢谢 更新

我的代码内存要求很高,这句话重复了很多次:

Node** x;
x = new Node*[11];
它在此分配时失败。我通过将输出发送到控制台来解决这一问题

我正在Visual Studio上构建代码。在VS2005和VS2008中,它都可以在调试模式下正常工作 但是,它在VS2005发布模式下抛出错误。 从中生成的直接exe 如果cl来自VS2010,则cl Program.cpp有效,但如果cl来自VS2005,则会失败。 有什么线索吗

PS:Linux给了我一个总线错误内核 谢谢

更新: 我猜,这可能是由于我所理解的“未对齐”的事情。我只做了11到12或任何偶数,它的工作!!!我不知道为什么。它不适用于奇数


更新2:?

我认为您在其他地方做了一些破坏程序堆的事情:例如,写入超过分配内存块的末尾,或者在释放内存块后写入内存块

例如,我建议诊断问题的最简单方法是使用一种旨在检测此类问题的调试器来运行软件

我的代码内存要求很高

你的内存真的用完了吗

你是这样删除x的吗

或:


或者可能有其他东西损坏了堆,尽管我希望在调试模式下运行会使它更明显,而不是更少。但是,对于堆损坏,很少有人能保证它能以一种好的、易于调试的方式进行

Node **x;
x = new Node*[11];
将11个指针分配给类节点,并将其作为双指针存储在变量x中。这很好

您的程序在此崩溃的事实可能是由于程序中其他地方发生的内存错误。也许您正在某个地方写入超过数组边界的内容。如果使用for循环加载此数组,请仔细检查索引


如果您可以访问内存分析器,我建议您使用它。在大型程序中很难找到这些bug。

如果分配失败,有效的C++98实现将抛出异常std::bad_alloc,而不仅仅是崩溃。我同意前面的答案,并建议在valgrind中运行您的程序,因为这会散发出内存损坏的气味。Valgrind应该可以在您选择的Linux发行版中使用。

为什么不使用std::vector?总线错误通常是一种未对齐的访问,您是否像使用节点阵列一样使用指向节点阵列的指针?您好,谢谢您的回答。我不能使用std::vector,因为有人告诉我不要使用它:我想,这可能是因为我理解的“未对齐”的原因。我只做了11到12或任何偶数,它的工作!!!我不知道为什么。它不适用于奇数!你能发布一些使用x的代码吗?可能是分配数组的溢出正在破坏堆,这可能是增加大小修复问题的原因。@Michael Burr是对的。如果将数组大小从11增加到12不再是问题的根源,那么您已经掩盖了问题,而不是解决了问题。感谢您指向delete[]x thing。但是错误发生在分配点——我想我非常肯定这一点。请看我上面的评论!谢谢。如果您使用了错误的删除,那么问题可能不会在删除时发生,但是如果之前的错误删除损坏了堆数据结构,那么稍后会发生另一次分配。
delete [] x;   // the correct way
delete x;  // incorrect
Node **x;
x = new Node*[11];