C++ 堆损坏

标签 c++ debugging visual-c++ corruption heap-memory

我已经有一段时间没有使用任何 C++ 了,但我决定完成我为某人所做的一个大项目。不过,我现在收到以下错误消息...

检测到堆损坏:在 0x17DEB940 处的正常 block (#1761) 之后。 CRT 检测到应用程序在堆缓冲区结束后写入内存。

我一直在逐步执行我认为可能导致它的所有功能,但我不知所措。有什么方法可以使用更高级的调试功能来解决这个问题吗?

最佳答案

这听起来确实像是典型的内存损坏错误。该平台将是有用的信息。在没有看到您的代码及其复杂性的情况下,有两种可能性:

  1. 我会猜测运行时 库将允许您添加对 堆验证代码直接来自 你的代码。我建议放置 调用堆验证代码 代码中的不同位置,这样你 可以弄清楚事情的去向 错误的。你会发现那个地方 堆坏了,你就会知道 在上一次通话中没问题。 如果 你需要然后查看代码 哪里出了问题。

  2. 如果相同的步骤破坏了内存中完全相同的位置, 你应该可以使用你的 调试器在 内存变了。一些 这些变化可能是有意的,但 你应该能弄清楚 哪个是罪魁祸首。

如果您的代码特别复杂或重现此代码所需的步骤很长,您可以结合使用两者 - 缩小有问题的代码部分,然后在损坏的内存位置放置断点。

大卫

关于C++ 堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635862/

相关文章:

google-chrome - 如何在 Chrome 调试器中查找下一次出现的表达式?

visual-studio - Visual Studio 调试器问题

c++ - 在 C++ 中调用 COM 时如何包装错误?

c++ - 当程序变得无响应时如何确定程序在做什么?

c++ - 如何使用我的 LLVM 中的现有函数传递 - 传递?

c++ - 在 C++ 中为 3D 数组分配连续内存

c - 使用 GDB 调试 C 项目

c++ - 为什么显式模板实例化的位置很重要

C++ << >> 运算符

c++ - if constexpr 和 C4702(以及 C4100 和 C4715)