在 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的.NET Framework 2.0升级成NET Framework 3.5相对应的VS2005会升级成VS2008吗