OpenCV Error: Bad argument (unrecognized or unsupported array type) in u unction

今天遇到个错误: 在程序退出的时候 提示报错

OpenCV Error: Bad argument (unrecognized or unsupported array type) in u
unction, file ..\..\..\src\opencv\modules\core\src\array.cpp, line 996

然后上代码

int _tmain(int argc, _TCHAR* argv[])
{
    IplImage* src      = 0;        //原图
    IplImage* graySrc  = 0;        //灰度图
    int key = 0;
    CvCapture* capture = cvCaptureFromCAM(0);
    cvNamedWindow("camera");
    cvNamedWindow("gray");
    while( NULL != (src = cvQueryFrame(capture) ) )
    {
        cvShowImage("camera",src);  //显示摄像头画面
        if( (key = waitKey(10)) !=-1)//如果2ms内有按键  有返回值key
        {
            printf("press key:%c\n",key);
            if(key == 'q'){
                waitKey(10);
                cvDestroyWindow("camera");
                cvDestroyWindow("gray");
                break;
            }
        }
        //获取src的灰度图
        graySrc = cvCreateImage(cvSize(src->width,src->height),src->depth,1);
        cvCvtColor(src,graySrc,CV_BGR2GRAY);
        cvShowImage("gray",graySrc);
    }
    cvReleaseImage(&src);
    cvReleaseImage(&graySrc);
    cvReleaseCapture(&capture);
    return 0;
}

捣鼓一阵,发现应该是内存错误。

根据http://blog.csdn.net/zhmyy/article/details/5374111,src和gray在ReleaseImage之前已经释放掉,所以找不到地址,于是报错

于是在Release之前判断一下是否已经释放

    if(!src)
        cvReleaseImage(&src);
    if(!graySrc)
        cvReleaseImage(&graySrc);
原文地址:https://www.cnblogs.com/skiz/p/3018635.html