当我在 Visual C++ 2005 中编译我的 Windows 应用程序(称为 CrosslinesDetection)(包括计算机视觉库 OpenCV 1.1)时,我没有收到任何编译或链接错误,但是当我运行它时,它到达一个点并冻结,并且 Windows说:
"Unhandled exception at 0x7c915223 in CrosslinesDetection.exe:
0xC0000005: Access violation writing location 0x00030ffc."
该程序是一个常见的 C++ Windows 应用程序,带有两行 OpenCV 代码:
IplImage *img = cvCreateImage( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1 );
cvReleaseImage( &img );
现在奇怪的行为是,如果我 - 包括 OpenCV 行,程序抛出异常 - 排除 OpenCV 行,程序正常工作。
我在另一个项目中使用了 OpenCV 库,没有任何问题。特别是,我为 GUI 制作了一个 C# 项目,并在后台编译为 DLL 的 C++ 项目。如果我为上述行创建这样的解决方案,我在执行过程中没有问题。
有谁知道,什么可能导致这个错误?
感谢您的帮助,斯特凡
感谢您的评论。
同时,我使用一个最小的项目进行测试。
我仍然不完全理解这个问题,但与此同时,我发现当我包含第三方库(来自 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"
然后,我必须关闭预编译头选项,并且必须从 /clr:pure 更改为 /clr 选项才能成功编译和链接项目。
但是,然后我运行程序,上面提到的异常被抛出......
我想知道,如果我滥用 C++ Windows 窗体应用程序并且我不应该包含我的纯 C++ 代码,或者 OpenCV 或 uEye 库是否真的存在问题。