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

标签 c++ visual-studio-2005 opencv std inline-functions

我正在处理一个非常棘手的问题,我已经处理了一个星期了。我撞到了一堵非常坚硬的墙,我的前额因撞到它而受伤,所以我希望有人能帮助我。

我在这个项目中使用 Visual Studio 2005 - 我安装了 2008,但在尝试时遇到了类似的问题。

我们目前有一个针对 OpenCv1.1 编译的应用程序,我正在尝试将其更新到 2.2。当我们切换到新库的静态链接时,应用程序崩溃 - 但仅在 Release模式下。因此动态链接和调试都可以正常工作。

崩溃发生在std::vector打电话时 push_back .

然后我想出了一个示例测试应用程序,它在 opencv 中运行一些基本代码,运行良好,然后采用完全相同的代码并将其添加到我们的应用程序中。该代码失败。

然后我破坏了应用程序,因此它没有实例化任何代码对象,除了调用该代码的主 gui 和 1 类,它仍然崩溃。但是,如果我直接在主图形用户界面中运行该代码,它运行良好。

然后我开始注释大量的应用程序(在永远不应该实例化的组件中),最终我一直在努力直到......

我有一个类有一个方法

void Foo()  
{  
    std::vector<int> blah;  
    blah.begin();  
}  

如果这个方法定义在header中,测试代码可以运行,但是如果这个代码定义在cpp文件中,就会崩溃。另外,如果我使用 std::vector<double>代替 int,它也可以。

然后我尝试使用编译器选项,如果我关闭优化 (/Od) 并将内联函数扩展设置为仅 __inline (/Ob1),即使代码在 cpp 文件中,它也能正常工作。

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

如果有人对此有任何见解,请告诉我。

谢谢, 锂铁

最佳答案

哎呀!找到解决方案。

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

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

那是有趣的一周。

关于c++ - 由于源文件中存在未执行的代码而在运行应用程序时崩溃 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175325/

相关文章:

python - OpenCV和Rawkit Python

c++ - printf() 令人惊讶的控制台输出

c++ - 是否可以绑定(bind) lambda 函数的第二个参数?

c++ - 错误 RC2175 : resource file res\icon3. bmp 不是 3.00 格式?

c++ - 是否有类似于 Visual Studio 关于可能丢失数据的 gcc 4.2 警告?

iphone - 在 iPhone 上检测图像中的三角形角

c++ - 为什么 Clang 的解析器会为同一类型生成不同的 Type 对象?

C++ : Dll injection. 为什么 CreateRemoteThread() 在记事本上失败?

visual-studio - Visual Studio 可以告诉我打开了多少个文件吗?

c++ - OpenCV 计算房间里的人数