我正在处理一个非常棘手的问题,我现在已经坚持了一个星期。我打了一面非常坚硬的墙壁,额头因撞击而受伤,所以我希望有人能帮助我。由于源文件中存在未执行代码而导致运行应用程序时发生崩溃 - C++
我正在使用Visual Studio 2005进行此项目 - 我已安装2008,但在尝试使用时遇到类似问题。
我们有一个应用程序目前正在对OpenCv1.1进行编译,我试图将它更新到2.2。当我们将静态链接切换到新的库时,应用程序崩溃 - 但仅在发布模式下。所以动态链接和调试都可以正常工作。调用push_back
当
崩溃是std::vector
。
然后我想到了它运行的一些基本代码在OpenCV中的正常工作,然后把该完全相同的代码,并把它添加到我们的应用程序的样本测试应用程序。该代码失败。
然后我去内脏的应用程序,它并没有实例除了主界面和1类称为代码的任何代码的对象,它仍然坠毁。但是,如果我直接在主GUI中运行该代码,则它工作正常。
我便开始注释掉的应用程序的大量(在不应该被实例化的组件),并最终我的工作我的方式下来下来下来,直到......
我有了一个方法的类
void Foo()
{
std::vector<int> blah;
blah.begin();
}
如果此方法是在报头中定义,测试代码的工作,但如果这个代码在CPP文件中定义,它崩溃。另外,如果我使用std::vector<double>
而不是int,它也可以。
然后我试着玩编译器选项,如果我关闭了优化(/ Od)并将内联函数扩展设置为仅__inline(/ Ob1),即使代码位于cpp文件中也可以工作。
当然,如果我们回到ungutted应用程序,并通过自己改变这些编译器选项,它崩溃。
如果有人对此有任何见解,请告诉我。
谢谢, Liron
当你使用调试器完成它时,程序能够完全加载或在它到达main(或WinMain)之前崩溃吗?你的问题很有趣,因为通常我发现动态链接比静态链接到运行时更有问题 – greatwolf 2011-03-03 00:53:16
程序完全加载正常。然后我在(Qt)gui上按下一个按钮,运行代码调用opencv。如果代码是正确的在按钮按下它的作品,但如果代码从另一个类中调用,它会崩溃。 – Liron 2011-03-03 01:17:30
我更新了项目,根本不创建gui,一旦我调用opencv代码,它仍然崩溃。 – Liron 2011-03-03 02:08:09