2012-03-22 40 views
0

隨時我致電cvNamedWindow我得到一個分段錯誤,我不知道它爲什麼會發生。我已經嘗試編寫在線代碼示例以及編寫我自己的代碼示例。這裏有一個最小的一段代碼,重新產生此問題:cvNamedWindow always segfaults

#include <opencv2/opencv.hpp> 

int main() { 
    cvNamedWindow("Video"); 
    return 0; 
} 

cv::namedWindow("Video")也不起作用。爲什麼會發生?我正在使用QG Creator在MinGW(C++編譯器v4.6.1)下編譯OpenCV 2.3.1。

+0

如果我沒有弄錯,cv :: namedWindow是在highgui頭文件中,但不應該出現在你的段錯誤中。我能想到的唯一原因就是你以某種方式鏈接到錯誤版本的opencv ... – etarion 2012-03-22 14:13:41

+0

此問題已解決此問題: http://stackoverflow.com/questions/4609069/opencv-2 -2-windows-xp-mingw-build-crashes-on-namedwindow -imshow – webmaster 2012-04-14 07:29:18

回答

1

我假設問題與我發佈的another thread有關。長話短說,我的另一個問題與我不知道的調試和發佈DLL之間的差異有關。

1

我測試你的代碼,並沒有能夠重現該問題上:

  • 的LinuxGCC 4.5.1 20100924(紅帽4.5.1-4)
  • 的Windows XPVS2010

然而,這是很好的做法,呼籲cvDestroyWindow()釋放創建窗口時分配的資源:

#include <opencv2/opencv.hpp> 

int main() 
{ 
    cvNamedWindow("Video"); 

    cvDestroyWindow("Video"); 

    return 0; 
} 

在Windows上我用OpenCV-2.3.0-win-superpack.exe。這是一個在Visual Studio 2010上的guide for installing

+0

你說得對,我也應該調用'cvDestroyWindow'。但是我使用調試器進行了檢查,程序在'cvNamedWindow'期間被隔離了,而不是之後。因此,在退出之前銷燬窗口並不能解決問題。 – Pieter 2012-03-22 13:57:12

+0

我不知道該告訴你什麼。這不會發生在Linux上。我將用MingW重新編譯OpenCV,並確保所有編譯成功。我假設你使用的是最新版本的OpenCV!你允許使用其他編譯器,如[VS2010](http://stackoverflow.com/a/7014918/176769)? – karlphillip 2012-03-22 14:04:19

+0

已更新的答案。 – karlphillip 2012-03-22 14:06:37

0

可能與您的問題的原因沒有直接關係,但對我來說,分段錯誤的原因是由於多線程(並行處理)。