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

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

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

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

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

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

【问题讨论】:

  • 我会用 Visual Studio 2008 构建 DLL,看看它是否有帮助。使用不同版本的运行时分配和取消分配内存时,您可能会遇到问题。您还可以单击重试并查看问题在调试器中发生的位置。它可能会让您对问题有所了解。
  • 当我点击“重试”时,弹出框就关闭了,什么也没发生
  • 在调试器下运行并使用应用验证器

标签: c++ visual-studio-2008 visual-c++ 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?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2013-07-06
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2013-10-12
      相关资源
      最近更新 更多