當我在Visual C++ 2005中編譯我的Windows應用程序(稱爲CrosslinesDetection)時,包括計算機視覺庫OpenCV 1.1,我沒有收到任何編譯或鏈接錯誤,但是當我運行它時,點並凍結,和Windows說以下內容:與OpenCV的奇怪行爲
"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#項目,並在後臺編譯了一個C++項目作爲DLL編譯。如果我爲上述線創建這樣的解決方案,我在執行期間沒有問題。
有沒有人有想法,可能會導致這個錯誤?
感謝您的幫助,斯特凡
感謝您的意見。
同時,我使用最小的項目進行測試。
我還沒有完全理解這個問題,但同時,我發現,當我包含第三方庫(來自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();
}
而且我加了headeras在開始Form1.h的:
#include "CameraControl.h"
#include "cv.h"
然後,我不得不關閉預編譯頭文件選項,我必須從/ clr:pure更改爲/ clr選項才能成功編譯和鏈接項目。
但是,後來我跑我不知道該程序的上述異常被拋出...
,如果我錯用C++ Windows窗體應用程序,我不應該inlcude我的純C++代碼或者如果真有OpenCV或uEye庫的問題。
如果你在調試器中運行程序會發生什麼? Visual Studio應該告訴你哪一行有訪問衝突。 如果您只取消註釋第一行,該怎麼辦?它仍然崩潰? – 2009-01-27 17:31:58