我正在研究一个相当棘手的问题,我已经研究了一周。我撞到了一堵非常硬的墙,我的前额因撞到它而受伤,所以我希望有人能帮助我。
我正在为这个项目使用 Visual Studio 2005 - 我安装了 2008,但在尝试时遇到了类似的问题。
我们目前有一个针对 OpenCv1.1 编译的应用程序,我正在尝试将其更新到 2.2。当我们切换到新库的静态链接时,应用程序崩溃 - 但仅在发布模式下。所以动态链接和调试都可以正常工作。
std::vector
调用时发生崩溃push_back
。
然后我想出了一个示例测试应用程序,它在 opencv 中运行一些基本代码,运行良好,然后将完全相同的代码添加到我们的应用程序中。该代码失败。
然后我删除了应用程序,因此它没有实例化任何代码对象,除了主 gui 和调用该代码的 1 个类,它仍然崩溃。但是,如果我直接在主 gui 中运行该代码,它就可以正常工作。
然后我开始注释掉大量的应用程序(在永远不应该实例化的组件中),最终我一路向下直到......
我有一个有方法的类
void Foo()
{
std::vector<int> blah;
blah.begin();
}
如果在头文件中定义了此方法,则测试代码可以工作,但如果在 cpp 文件中定义了此代码,则会崩溃。此外,如果我使用std::vector<double>
而不是 int,它也可以工作。
然后我尝试使用编译器选项,如果我关闭了优化 (/Od) 并将内联函数扩展设置为 Only __inline (/Ob1),即使代码位于 cpp 文件中,它也可以工作。
当然,如果我们回到未删减的应用程序并自行更改那些编译器选项,它就会崩溃。
如果有人对此有任何见解,请告诉我。
谢谢,里龙