C++ CvNamedWidow总是能识别故障
每当我调用C++ CvNamedWidow总是能识别故障,c++,c,opencv,mingw,C++,C,Opencv,Mingw,每当我调用cvNamedWindow时,我都会遇到分段错误,我不知道为什么会发生这种情况。我尝试过在线编译代码示例,也尝试过编写自己的代码示例。下面是一段再现问题的最小代码: #include <opencv2/opencv.hpp> int main() { cvNamedWindow("Video"); return 0; } #包括 int main(){ cvNamedWindow(“视频”); 返回0; } cv::namedWindow(“视频”)也
cvNamedWindow
时,我都会遇到分段错误,我不知道为什么会发生这种情况。我尝试过在线编译代码示例,也尝试过编写自己的代码示例。下面是一段再现问题的最小代码:
#include <opencv2/opencv.hpp>
int main() {
cvNamedWindow("Video");
return 0;
}
#包括
int main(){
cvNamedWindow(“视频”);
返回0;
}
cv::namedWindow(“视频”)
也不起作用。为什么会发生这种情况?我正在使用Qt Creator使用MinGW(C++编译器v4.6.1)下的OpenCV 2.3.1进行编译。我测试了您的代码,但无法在以下计算机上重现问题:
- Linux和GCC 4.5.120100924(红帽4.5.1-4)
- Windows XP与VS2010
cvdestronWindow()
释放创建窗口时分配的资源是一种好的做法:
#include <opencv2/opencv.hpp>
int main()
{
cvNamedWindow("Video");
cvDestroyWindow("Video");
return 0;
}
#包括
int main()
{
cvNamedWindow(“视频”);
视频窗口(“视频”);
返回0;
}
在我用过的窗户上。下面是Visual Studio 2010上的一个it解决方案。我测试了您的代码,但无法在以下计算机上重现该问题:
- Linux和GCC 4.5.120100924(红帽4.5.1-4)
- Windows XP与VS2010
cvdestronWindow()
释放创建窗口时分配的资源是一种好的做法:
#include <opencv2/opencv.hpp>
int main()
{
cvNamedWindow("Video");
cvDestroyWindow("Video");
return 0;
}
#包括
int main()
{
cvNamedWindow(“视频”);
视频窗口(“视频”);
返回0;
}
在我用过的窗户上。这是Visual Studio 2010上的一个it问题。我假设问题与我发布的内容有关。长话短说,我的另一个问题与调试和发布DLL之间的差异有关,我不知道这些差异。我假设问题与我发布的DLL有关。长话短说,我的另一个问题与我不知道的调试和发布DLL之间的差异有关。可能与问题的原因没有直接关系,但对我来说,分段错误的原因是由于多线程(并行处理)。可能与问题的原因没有直接关系,但对我来说,分段错误的原因是多线程(并行处理)。你说得对,我也应该调用
cvdestronWindow
。但是我使用调试器进行了检查,程序在cvNamedWindow
期间出现了故障,而不是之后。因此,在退出之前破坏窗口并不能解决问题。我不知道该告诉你什么。这两种情况在Linux上都不会发生。我会用MingW重新编译OpenCV,并确保所有内容都编译成功。我假设您使用的是最新版本的OpenCV!你可以使用其他编译器吗?那没什么区别。毕竟,这是一个默认参数。到目前为止还没有编译器出故障的迹象!更新答案。这个问题在VS2010上没有发生。有趣的是你提到了这一点。在阅读了您的评论之后,我设置了一个VS2010编译环境,代码运行顺利。然后我切换回MinGW,它也工作得很顺利!我不知道发生了什么,但似乎已经解决了。我想一定是我的构建环境中的某些东西。你是对的,我也应该调用cvdestronWindow
。但是我使用调试器进行了检查,程序在cvNamedWindow
期间出现了故障,而不是之后。因此,在退出之前破坏窗口并不能解决问题。我不知道该告诉你什么。这两种情况在Linux上都不会发生。我会用MingW重新编译OpenCV,并确保所有内容都编译成功。我假设您使用的是最新版本的OpenCV!你可以使用其他编译器吗?那没什么区别。毕竟,这是一个默认参数。到目前为止还没有编译器出故障的迹象!更新答案。这个问题在VS2010上没有发生。有趣的是你提到了这一点。在阅读了您的评论之后,我设置了一个VS2010编译环境,代码运行顺利。然后我切换回MinGW,它也工作得很顺利!我不知道发生了什么,但似乎已经解决了。我猜一定是在我的构建环境中。如果我没有弄错的话,cv::namedWindow在highgui标题中,但是您的segfault不应该是这种情况。我所能想到的唯一原因是你链接到了一个错误版本的opencv…这个问题在这篇文章中已经解决了:如果我没有弄错的话,cv::namedWindow在highgui标题中,但是你的segfault不应该是这样。我能想到的唯一原因是你链接到了一个错误的opencv版本……这个问题在这篇文章中得到了解决: