当我在包括OpenCV 1.1(一个计算机视觉库)的Visual C ++ 2005中编译我的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#项目,并在后台编译为DLL的C ++项目。如果我为上述行创建了这样的解决方案,那么在执行期间我没有问题。
有人有想法,可能会导致此错误吗?
感谢任何帮助,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的开头添加了headeras:
#include "CameraControl.h"
#include "cv.h"
然后,我不得不关闭预编译的头选项,我不得不从/ clr:pure更改为/ clr选项以成功编译和链接项目。
但是,然后我运行程序,抛出上面提到的异常......
我想知道,如果我滥用C ++ Windows窗体应用程序,我不应该包含我的纯C ++代码,或者OpenCV或uEye库确实存在问题。
答案 0 :(得分:1)
我建议在本机项目中测试相同的代码,而不使用托管代码。 MFC或Win32控制台应用程序。
答案 1 :(得分:0)
不是吗
cvReleaseImage( img );
? (去掉了&符号) 你还应该检查正确的调用约定。
答案 2 :(得分:0)
我刚刚使用OpenCV 1.0和Visual Studio 2008运行并编译了这些确切的行,没有错误。也许尝试创建一个空项目,除了包含cxcore.h头之外什么都不做,然后运行这两行。
另外只是另一张海报:没有&符号是规范的一部分,他在那里是正确的。对不起,我会将此作为评论发布,但还不能。