2013-01-12 42 views
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代碼以便隔離問題。

是什麼導致此訪問衝突,我該如何擺脫它?

謝謝。

+1

它實際上是文件名中的多餘字母嗎?如果你將這兩個調用交換爲'imread',那麼它是第一次調用的呢?不知何故,這似乎不太可能對我。 – us2012

+0

有些人因此發現使用Release庫可能會有所幫助:http://stackoverflow.com/questions/8164932/unhandled-exception-on-opencvvs2010 – us2012

+0

你可以將文件發佈到某處嗎?消除char數組並直接在函數調用中粘貼圖像名稱字符串。這些文件是否可用?嘗試使用fopen打開文件,只是爲了查看它們是否存在於您運行它的工作目錄中。 Visual Studio有一個使用源文件夾作爲工作目錄的惡習,而不是實際的exe文件所在的位置。我在調試中使用這種代碼沒有問題。 –

回答

0

this post on the OpenCV forums,在使用Visual C++ 2008時,OpenCV路徑用於2010(OPENCV_AV設置爲「%OPENCV_ROOT%\ x86 \ vc10」)時發生這種情況。

我已在我的實驗室PC上更正了此問題(OPENCV_AV現已設置爲「%OPENCV_ROOT%\ x86 \ vc9」),該設置使用Visual C++ 2010供以前的研究人員使用。

感謝所有回覆!