这是我第一次使用这样的网站,但我很困难。 包含后面的背景部分是为了完整性,因为我不确定其中描述的任何行为是否可能导致我当前面临的问题。
背景
我和一位同事在Visual Studio 2010(完整版)的控制台应用程序(默认设置)中编写了大量c ++代码,用于大学作业。我们决定尝试使用winforms应用程序,然后在visual studio 2010中创建一个并从控制台应用程序导入所有代码。我们遇到了以下问题:
在完成上述事情后,我们的项目正在编译。
问题
当我们运行应用程序时,我们得到以下断言失败:
_CrtIsValidHeapPointer(pUserData)
这个断言立即失败,似乎没有执行任何代码,因为当我在main的开头设置断点时,它们在调试时没有到达(调用堆栈是空的)。
我能够让应用程序运行的唯一方法是将CLR选项设置为/ clr:pure并删除boost的所有用法。
我有3个问题:
谢谢大家的时间,我没有发布任何代码,因为我确实不知道要发布什么...我不知道问题出在哪里。如果有人建议发布什么代码,我会向他们开放。
此致 布拉德
答案 0 :(得分:1)
尝试回答您的具体问题:
main()
是您的代码的入口点,而不是整个可执行文件的入口点。可能存在大量样板初始化以及初始化所有全局静态对象。例如,在以下示例中,函数在输入main之前运行:
int SomeGlobal = SomeFunction();
int main (void)
{
...
}
我对/ clr几乎没有经验,但我可以指出一些有用的参考资料。确保您在How To Migrate to /clr和/clr settings中了解适用于您的所有内容。
我再次没有直接的知识,但this forum post on boost::shared_ptr和this SO question on boost::thread似乎表明存在一些问题。
为了进一步诊断问题,我会尝试一些事情:
pUserData
可能来自CString析构函数。确保将所有字符串迁移到托管系统字符串。答案 1 :(得分:0)
我知道现在已经很晚了,但我发现了这个问题,因为我遇到了同样的问题。
查看我工作的另一个项目(不是我的),我发现问题来自文件: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
(我只是将所有这些都包括在内,而不是专注于我需要的东西,除了导致问题的那个)
希望它可以帮到你