[英]Program crashes on using grabCut in OpenCV 2.3.1
我正在使用以下代码:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
const string ipImgName= argv[1];
Mat ipImg;
ipImg = imread( ipImgName, 1 );
cv::Mat gcImg;
cv::Mat bgdModel;
cv::Mat fgdModel;
cv::Rect rect(0, 0, ipImg.cols-1, ipImg.rows-1);
cv::grabCut( ipImg, gcImg, rect, bgdModel, fgdModel, 1, cv::GC_INIT_WITH_RECT );
return 0;
}
但是,当退出主循环时,调试器进入~Mat()
析构函数时,对于gcImg或bgdModel或fgdModel,代码在release()
上崩溃(说“这可能是由于堆损坏”)。
但是,如果我使用new
在堆上分配cv::Mat
,然后再不删除它们,则代码可以正常运行。 我将Visual Studio 2010与OpenCV 2.3.1一起使用。
如果您正在运行与Release库链接的Debug版本,则由于使用了不同的内存分配例程,因此可能会报告此虚假的“错误”。
在Debug版本中,在分配的块的任一端用保护字节保护内存分配,并执行各种检查以检查是否损坏,泄漏等。在Release版本中,不执行这些检查,并且当您混合使用Debug和Release代码时,一个释放了另一个,这是您看到的典型错误。
实际上这不是真正的错误,只是混合不同运行时的副作用。 MSDN有更多详细信息 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.