【问题标题】:How to fix _CrtIValidHeapPoint(pUserData) assertion failure in c++ winforms application如何修复 C++ winforms 应用程序中的 _CrtIValidHeapPoint(pUserData) 断言失败
【发布时间】:2011-10-20 14:27:47
【问题描述】:

这是我第一次使用这样的网站,但我被严重卡住了。 为了完整起见,包含以下背景部分,因为我不确定其中描述的任何操作是否可能导致我当前面临的问题。

背景

我和一位同事在 Visual Studio 2010(完整版)的控​​制台应用程序(使用默认设置)中为大学作业编写了大量 C++ 代码。我们决定尝试一个 winforms 应用程序,因此在 Visual Studio 2010 中创建了一个,并从控制台应用程序中导入了我们所有的代码。我们遇到了以下问题:

  1. 需要在“stdafx.h”文件中添加我们的包含,然后在我们所有的实现文件(.cpp)中添加#include“stdafx.h”。
  2. 在我们使用 c++ 字符串 (std::string) 的地方,我们必须更改为托管系统字符串 (System::String^) 以实现 CLR 兼容性。
  3. 将“公共语言运行时支持”编译选项更改为 /clr 而不是 /clr:pure。这是解决我们在 boost::shared_ptr 中遇到的链接错误(LNK2028、LNK2019)所必需的......

在我们做完上述事情之后,我们的项目正在编译。

问题

当我们运行应用程序时,我们得到以下断言失败:

_CrtIsValidHeapPointer(pUserData)

这个断言立即失败,似乎没有执行任何代码,因为当我在 main 开始处设置断点时,它们在调试中没有到达(调用堆栈为空)。

我能够让应用程序运行的唯一方法是将 CLR 选项设置为 /clr:pure 并删除所有 boost 的使用。

我有 3 个问题:

  1. 是否正在执行代码?我知道在不执行代码的情况下断言可能会失败听起来是不可能的。也许在 main 之前发生了什么?
  2. /clr 和 /clr:pure 选项的真正含义是什么?
  3. 可以将 boost 库编译为 clr 兼容代码吗?如果是这样,什么可能导致链接问题?

感谢大家的宝贵时间,我没有发布任何代码,因为我真的不知道该发布什么...我不知道问题出在哪里。如果有人对发布什么代码有建议,我愿意接受。

问候 布拉德

【问题讨论】:

    标签: c++ winforms boost clr


    【解决方案1】:

    尝试回答您的具体问题:

    1. main()你的代码的入口点,而不是整个可执行文件。可能有大量的样板初始化以及初始化所有全局静态对象。例如,在以下示例中,该函数在输入 main 之前运行:

         int SomeGlobal = SomeFunction();
      
         int main (void)
         {
         ...
         }
      
    2. 我对 /clr 的经验几乎为零,但我可以为您指出一些有用的参考资料。确保您了解How To Migrate to /clr/clr settings 中适用于您的所有内容。

    3. 我也没有直接的了解,但this forum post on boost::shared_ptrthis SO question on boost::thread 似乎表明存在一些问题。

    为了进一步诊断问题,我会尝试一些方法:

    • 从一个空的或“hello world”CLR 项目开始,以确保它可以编译和运行。
    • 使用 boost 尝试一个简单的示例,看看它是否完全有效或重复了问题。
    • 尝试清理并完全重建您的应用程序。
    • pUserData 可能来自 CString 析构函数。确保所有字符串都迁移到托管系统字符串。
    • 如果您使用简单的示例,则只需添加示例直到您复制问题,或者从应用程序中删除内容直到问题消失。

    【讨论】:

      【解决方案2】:

      我知道已经很晚了,但是我发现这个问题是因为我遇到了同样的问题。

      查看我正在工作的另一个项目(不是我的),我发现问题来自文件:opencv_ts248d.lib。如果您从您的依赖项中删除它,它会正常工作(我不知道为什么,猜想问题出在属于它的函数中),因此您将拥有以下内容:

      opencv_calib3d248d.lib
      opencv_contrib248d.lib
      opencv_core248d.lib
      opencv_features2d248d.lib
      opencv_flann248d.lib
      opencv_gpu248d.lib
      opencv_highgui248d.lib
      opencv_imgproc248d.lib
      opencv_legacy248d.lib
      opencv_ml248d.lib
      opencv_nonfree248d.lib
      opencv_objdetect248d.lib
      opencv_ocl248d.lib
      opencv_photo248d.lib
      opencv_stitching248d.lib
      opencv_superres248d.lib
      opencv_video248d.lib
      opencv_videostab248d.lib
      

      (我只是将所有这些都包括在内,而不专注于我需要的东西,除了导致问题的那个)

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-21
        • 2019-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-22
        相关资源
        最近更新 更多