由于源文件中存在未执行的代码而运行应用程序时崩溃 – c

前端之家收集整理的这篇文章主要介绍了由于源文件中存在未执行的代码而运行应用程序时崩溃 – 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文件中也是如此.

当然,如果我们回到未知的应用程序并自己更改这些编译器选项,它就会崩溃.

如果有人对此有任何见解,请通知我.

谢谢,
Liron

解决方法

哎呀!解决方案出来了

在我们的解决方案中,我们定义了_SECURE_SCL = 0,但是在第三方库中,我们已经构建了,这是未定义的(这意味着= 1).将_SECURE_SCL设置为0可以显着地减少运行时间,但是必须对所有包含的lib都执行相同的操作,否则它们会以不同的方式处理数组大小.

http://msdn.microsoft.com/en-us/library/aa985896%28v=vs.80%29.aspx

那是一个有趣的一周.

猜你在找的C&C++相关文章