由于源文件中存在未执行的代码而运行应用程序时崩溃 – c
我正在处理一个相当棘手的问题,我一直在一个礼拜一个礼拜.我打了一个非常坚硬的墙,我的前额伤害了它,所以我希望有人能帮助我.
我正在使用Visual Studio 2005这个项目 – 我已经安装了2008,但遇到类似的问题,当我尝试. 我们目前正在使用OpenCv1.1编译的应用程序,我正在尝试将其更新为2.2.当我们将静态链接切换到新的libs时,应用程序崩溃 – 但只在释放模式下.所以动态链接和调试都工作正常. 当调用push_back时,崩溃在std :: vector中. 然后我想出了一个示例测试应用程序,它在opencv中运行一些基本代码,工作正常,然后使用完全相同的代码并将其添加到我们的应用程序中.该代码失败. 然后我应用了这个应用程序,所以它没有实例化任何代码对象,除了主gui和1类调用该代码,它仍然崩溃.但是,如果我直接在主gui里运行这个代码,那就行了. 然后,我开始注释大量的应用程序(在不应该被实例化的组件中),最后我下了工作,直到… 我有一个类有一个方法 void Foo() { std::vector<int> blah; blah.begin(); } 如果在标题中定义了此方法,则测试代码可以工作,但是如果该代码在cpp文件中定义,则会崩溃.另外,如果我使用std :: vector< double>而不是int,它也有效. 然后,我尝试使用编译器选项,如果我将优化关闭(/ Od)和Inline Function Expansion设置为Only __inline(/ Ob1),即使该代码位于cpp文件中也是如此. 当然,如果我们回到未知的应用程序并自己更改这些编译器选项,它就会崩溃. 如果有人对此有任何见解,请通知我. 谢谢, 解决方法
哎呀!解决方案出来了
在我们的解决方案中,我们定义了_SECURE_SCL = 0,但是在第三方库中,我们已经构建了,这是未定义的(这意味着= 1).将_SECURE_SCL设置为0可以显着地减少运行时间,但是必须对所有包含的lib都执行相同的操作,否则它们会以不同的方式处理数组大小. http://msdn.microsoft.com/en-us/library/aa985896%28v=vs.80%29.aspx 那是一个有趣的一周. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |