当我在 Visual C++ 2005(包括计算机视觉库 OpenCV 1.1)中编译我的 Windows 应用程序(称为 CrosslinesDetection)时,我没有遇到任何编译或链接错误,但是当我运行它时,它到达一个点并卡住, Windows 会显示以下内容:
"Unhandled exception at 0x7c915223 in CrosslinesDetection.exe:
0xC0000005: Access violation writing location 0x00030ffc."
程序是一个普通的C++ Windows Applikation,有两行OpenCV代码:
IplImage *img = cvCreateImage( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1 );
cvReleaseImage( &img );
现在奇怪的行为是,如果我 - 包括 OpenCV 行,程序抛出异常 - 排除 OpenCV 行,程序正常运行。
我在另一个项目中使用了 OpenCV 库,没有任何问题。特别是,我为 GUI 创建了一个 C# 项目,并在后台将 C++ 项目编译为 DLL。如果我为上述几行创建这样的解决方案,我在执行过程中没有问题。
有没有人知道什么可能导致这个错误?
感谢您的帮助,Stefan
感谢评论。
与此同时,我使用一个最小的项目进行测试。
我仍然不完全理解这个问题,但与此同时,我发现当我包含第三方库(来自 uEye)时会发生异常。
如果我在项目中使用来自 OpenCV 和 uEye 库的单个函数,则会发生异常。如果我使用来自 OpenCV 或 uEye 的单个函数,则不会抛出异常。因此,这些库似乎有些不兼容,或者还有另一个问题。但是,我不知道如何检测它。
目前还没有。在最小的例子中,函数是不相关的。一个函数初始化相机,另一个函数初始化图像结构。
但也许错误在别处......
我在 Visual Studio 中创建了一个 C++ Windows 窗体应用程序。我在 Form1.h 文件中添加了一个按钮和相应的函数:
private: System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) {
OpenCamera();
IplImage * img = cvCreateImageHeader( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1);
cvReleaseImage( &img );
CloseCamera();
}
我在 Form1.h 的开头添加了标题:
#include "CameraControl.h"
#include "cv.h"
然后,我必须关闭预编译 header 选项,并且必须从/clr:pure 更改为/clr 选项才能成功编译和链接项目。
但是,然后我运行程序抛出上述异常...
我想知道,如果我误用了 C++ Windows 窗体应用程序并且我不应该包含我的纯 C++ 代码,或者 OpenCV 或 uEye 库是否真的存在问题。
最佳答案
我建议在没有托管代码的 native 项目中测试相同的代码。 MFC 或 Win32 控制台应用程序。
关于c++ - OpenCV 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483199/