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

C++ 如何修复c+中的"crtivalidheapoint(pUserData)断言失败;+;winforms应用程序,c++,winforms,boost,clr,C++,Winforms,Boost,Clr,这是我第一次使用这样的网站,但我明显被卡住了。 下面的背景部分是为了完整性而包含的,因为我不确定其中描述的任何操作是否导致了我目前面临的问题 背景 一位同事和我在Visual Studio 2010(完整版)中为一个大学作业在控制台应用程序中编写了大量C++代码(默认设置)。我们决定尝试使用winforms应用程序,因此在VisualStudio2010中创建了一个winforms应用程序,并从控制台应用程序导入了所有代码。我们面临以下问题: 需要在“stdafx.h”文件中添加include,

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

背景

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

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

    问题

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

    _CrtIsValidHeapPointer(pUserData)

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

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

    我有3个问题:

  • 代码正在执行吗?我知道如果不执行代码,断言可能会失败,这听起来是不可能的。也许在这之前有什么事情发生吗
  • /clr和/clr:pure选项的真正含义是什么
  • boost库是否可以编译为与clr兼容的代码?如果是,什么可能导致链接问题
  • 谢谢大家的时间,我没有发布任何代码,因为我真的不知道该发布什么…我不知道问题发生在哪里。如果有人对发布什么代码有建议,我愿意接受

    问候
    Brad要尝试回答您的具体问题:

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

       int SomeGlobal = SomeFunction();
    
       int main (void)
       {
       ...
       }
    
  • 我几乎没有使用/clr的经验,但我可以为您提供一些有用的参考资料。确保您了解所有适用于您的信息

  • 我再次没有直接的知识,但似乎表明有一些问题

  • 为了进一步诊断该问题,我将尝试以下几点:

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

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

        查看我正在工作的另一个项目(不是我的),我发现问题来自文件:
        opencv\u 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
        
        (我只是把它们都包括进来,没有把重点放在我需要的东西上,除了导致问题的那一个)

        希望对你有帮助