出于某种原因,此代码在第二个imread处产生访问冲突,但不是第一个。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc, char **argv)
{
Mat mat1, mat2;
char imgname1[255]="cise_StackD.tif";
mat1 = imread( imgname1, CV_LOAD_IMAGE_GRAYSCALE);
char imgname2[255]="ecise_StackD.tif";
mat2 = imread( imgname2, CV_LOAD_IMAGE_GRAYSCALE);
return 0;
}
确切的运行时错误消息是:“MLMVNroThrust.exe中0x61f437ef(msvcr100d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0xcccccccc。”具有相同可见项目设置的相同代码在另一台PC上可以接受。图像是相同的副本。
我正在使用OpenCV 2.4.3预建的二进制文件;这些项目也被设置为使用CUDA,但我已经删除了所有CUDA代码以解决问题。
是什么导致此违规访问以及如何摆脱它?
感谢。
答案 0 :(得分:0)
Per this post on the OpenCV forums,当使用Visual C ++ 2008且2010年的OpenCV路径(OPENCV_AV设置为“%OPENCV_ROOT%\ x86 \ vc10”)时会发生这种情况。
我已经在我的实验室PC上更正了这个问题(OPENCV_AV现在设置为“%OPENCV_ROOT%\ x86 \ vc9”),这是用Visual C ++ 2010设置的,供以前的研究人员使用。
感谢所有回复的人!