如何修复c++ winforms应用程序中的_CrtIValidHeapPoint(pUserData)断言失败

How to fix _CrtIValidHeapPoint(pUserData) assertion failure in c++ winforms application

本文关键字:CrtIValidHeapPoint pUserData 失败 断言 c++ 何修复 winforms 应用程序      更新时间:2023-10-16

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

我和一个同事在visual studio 2010(完整版)的控制台应用程序(默认设置)中编写了一大堆c++代码,以完成一项大学作业。我们决定尝试制作一个winforms应用程序,于是在visual studio 2010中创建了一个,并从控制台应用程序中导入了所有代码。我们面临以下问题:

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

当我们完成了上面的事情后,我们的项目开始编译了。

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

_CrtIsValidHeapPointer (pUserData)

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

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

我有三个问题:

  1. 代码是否正在执行?我知道,如果不执行代码,断言可能会失败,这听起来是不可能的。在main之前会发生什么事吗?
  2. /clr和/clr:pure选项到底是什么意思?
  3. boost库可以编译成clr兼容的代码吗?如果是这样,什么可能导致链接问题?

感谢大家的时间,我没有发布任何代码,因为我真的不知道该发布什么…我不知道问题发生在哪里。如果有人有什么代码发布的建议,我是开放给他们。

的问候布拉德。

试着回答你的具体问题:

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

       int SomeGlobal = SomeFunction();
       int main (void)
       {
       ...
       }
    
  2. 我几乎没有使用/clr的经验,但是我可以给你一些有用的参考资料。确保你理解了如何迁移到/clr和/clr设置中适用于你的所有内容。

  3. 我再次没有直接的知识,但这个论坛帖子在boost::shared_ptr和这个SO问题在boost::线程似乎表明有一些问题。

为了进一步诊断问题,我将尝试一些事情:

  • 从一个空的或"hello world"的CLR项目开始,以确保它可以编译和运行。
  • 尝试使用boost的简单示例,看看它是否有效或重复问题。
  • 尝试清理并重新构建应用程序。
  • pUserData可以来自CString析构函数。确保所有字符串都迁移到受管理的系统字符串。
  • 如果你简单的样本工作,那么它是一个问题,直到你重复的问题,或从你的应用程序中删除的东西,直到问题消失。

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

在另一个项目我已经工作(不是我的),我发现问题来自文件: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

(除了导致问题的那个,我只是包括了所有这些,而没有关注我所需要的)

希望对你有所帮助

相关文章:
  • 没有找到相关文章