0
由於某些原因,此代碼會在第二次讀取時生成訪問衝突,但不是第一次。多一個字母導致訪問衝突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;
}
確切運行時錯誤信息是: 「在0x61f437ef(msvcr100d.dll)在MLMVNroThrust.exe未處理異常:0000005:訪問衝突讀取位置0xcccccccc」。具有相同可見項目設置的相同代碼可以在另一臺PC上運行。這些圖像是相同的副本。
我使用的是OpenCV 2.4.3預構建的二進制文件;這些項目也被設置爲使用CUDA,但我已經刪除了所有CUDA代碼以便隔離問題。
是什麼導致此訪問衝突,我該如何擺脫它?
謝謝。
它實際上是文件名中的多餘字母嗎?如果你將這兩個調用交換爲'imread',那麼它是第一次調用的呢?不知何故,這似乎不太可能對我。 – us2012
有些人因此發現使用Release庫可能會有所幫助:http://stackoverflow.com/questions/8164932/unhandled-exception-on-opencvvs2010 – us2012
你可以將文件發佈到某處嗎?消除char數組並直接在函數調用中粘貼圖像名稱字符串。這些文件是否可用?嘗試使用fopen打開文件,只是爲了查看它們是否存在於您運行它的工作目錄中。 Visual Studio有一個使用源文件夾作爲工作目錄的惡習,而不是實際的exe文件所在的位置。我在調試中使用這種代碼沒有問題。 –