在 vs2008 中升级后检测到堆损坏

Posted

技术标签:

【中文标题】在 vs2008 中升级后检测到堆损坏【英文标题】:HEAP CORRUPTION DETECTED after upgrade in vs2008 【发布时间】:2012-07-11 07:22:57 【问题描述】:

我有一个在 vc++ 6 中构建的项目。现在我升级它 vs2008,它现在构建完美,但是当我从调试文件夹打开它时,它也打开但不执行,因为相关的 dll 不存在。

现在我复制了另一个文件夹中的exe和相关的dll并尝试在弹出框打开时打开它。

现在我脑子里有两个问题-

    是否有文件损坏。 我的 dll 是在 vc++6 环境中构建的。我是否也应该升级 dll。

可能还有另一个问题。 请推荐!

【问题讨论】:

我会用 Visual Studio 2008 构建 DLL,看看它是否有帮助。使用不同版本的运行时分配和取消分配内存时,您可能会遇到问题。您还可以单击重试并查看问题在调试器中发生的位置。它可能会让您对问题有所了解。 当我点击“重试”时,弹出框就关闭了,什么也没发生 在调试器下运行并使用应用验证器 【参考方案1】: 在 Visual C++ 2008 中构建所有项目和解决方案,并小心删除所有更高级别的警告(至少 1 级和 2 级)。 从调试器运行程序(在调试模式下 - 即 F5,而不是 Ctrl+ F5) 仅运行调试版本。那也只有 32 位,您可以在其中编辑并继续。为此,您必须启用 /DEBUG 链接器选项 尝试缩小问题范围。进行逐步调试,看看它在哪里失败。如果它断言,它是,还不错!查看调用堆栈并找到原因。 不要忽略异常,或将它们隐藏到 try-catch 块中。

【讨论】:

【参考方案2】:

遵守规则: 内存应该在同一个模块中分配和释放。即不要在 dll 中分配而在 exe 中释放,反之亦然。

您应该检查您的项目正在使用哪个crt。不同的CRT分配内存的方式不同,在进行的过程中还会做很多额外的工作。

见:Do (statically linked) DLLs use a different heap than the main program?

也许你应该最终重构你的代码。

【讨论】:

以上是关于在 vs2008 中升级后检测到堆损坏的主要内容,如果未能解决你的问题,请参考以下文章

VS2005和VS2008做的项目有啥区别

将项目从 vc6 升级到 vc9 后检测到堆损坏

释放 2D 数组 - 检测到堆损坏

VS2005的.NET Framework 2.0升级成NET Framework 3.5相对应的VS2005会升级成VS2008吗

将 VS6 MFC 对话框应用程序外观升级到 VS2008

无法使用 VS2008 内存泄漏检测器