我正在使用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文件中也是如此.
当然,如果我们回到未知的应用程序并自己更改这些编译器选项,它就会崩溃.
如果有人对此有任何见解,请通知我.
谢谢,
Liron
解决方法
在我们的解决方案中,我们定义了_SECURE_SCL = 0,但是在第三方库中,我们已经构建了,这是未定义的(这意味着= 1).将_SECURE_SCL设置为0可以显着地减少运行时间,但是必须对所有包含的lib都执行相同的操作,否则它们会以不同的方式处理数组大小.
http://msdn.microsoft.com/en-us/library/aa985896%28v=vs.80%29.aspx
那是一个有趣的一周.