2 qq 34023390 qq_34023390 于 2016.03.28 20:03 提问

用MFC的对话框载入摄像头并处理,运行接近10分钟后提示内存出错,指针都释放掉了。这是什么原因呀? 5C

图片说明

相关的代码:
void CMFC_VedioDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
if(!pCapture)
{

    pCapture = cvCaptureFromCAM(0);
    pFrame = cvQueryFrame(pCapture);
    drawToDC(pFrame, IDC_Open);
}

SetTimer(IDC_BUTTON1, 10, NULL);

}

void CMFC_VedioDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(IDC_BUTTON2, 10, NULL);
}

void CMFC_VedioDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int i, j;
switch(nIDEvent)
{
case IDC_BUTTON1:
{

if(m_bOpenCamera)
{

            pFrame = cvQueryFrame(pCapture);
            drawToDC(pFrame, IDC_Open);
        }
        break;
    }

case IDC_BUTTON2:
    {


        IplImage* pGray = cvCreateImage(cvGetSize(pFrame), 8, 1);
        cvCvtColor(pFrame, pGray, CV_BGR2GRAY);

        cvCanny(pGray,pGray,100,255,3);

        drawToDC(pGray, IDC_DEAL);

        cvReleaseImage(&pGray);
        break;
    }

}


CDialogEx::OnTimer(nIDEvent);

}

void CMFC_VedioDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值c

cvReleaseCapture(&pCapture);
cvReleaseImage(&pFrame);

KillTimer(IDC_BUTTON1);
KillTimer(IDC_BUTTON2);
CDialogEx::OnClose();

}

void CMFC_VedioDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnOK();
}

PS:参考这个博客写的代码:http://www.cnblogs.com/leven20061001/archive/2012/10/17/2727865.html

运行10分钟程序就报错了,好郁闷呀!

3个回答

lx624909677
lx624909677   Ds   Rxr 2016.03.28 21:40

你释放指针干嘛?指针只占4字节,蹦了要看蹦哪儿了,打开任务管理器,看下你的程序的内存是不是一直在增加

oyljerry
oyljerry   Ds   Rxr 2016.03.29 13:40

先看看你具体报错时的代码callstack,然后就是检查出错函数的各个参数,尤其指针等。

VisualEleven
VisualEleven   Ds   Rxr 2016.04.01 17:56

是不是有内存泄漏或者GDI资源泄漏?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!