您的位置:首页 > 其它

内存申请释放频繁问题

2014-07-24 11:08 218 查看
内存不断的申请,再不断的释放,程序跑的过程中可能就会出现申请不一定成功,或释放不一定成功,导致出现内存泄露的现象。

如下列:

CvCapture* cap = cvCreateFileCapture(filePath);

IplImage* frame;

for (;;)

{

frame = cvQueryFrame(cap);

if( !frame)

break;

imshow("frame",frame);

cvWaitKey(1);

dst_cvsize.width = WIDTH; //目标图像的宽为源图象宽的scale倍

dst_cvsize.height =HEIGHT; //目标图像的高为源图象高的scale倍

dst = cvCreateImage( dst_cvsize, frame->depth,frame->nChannels); //构造目标图象

cvResize(frame, dst, CV_INTER_LINEAR); //缩放源图像到目标图像

cot++;

inputImage.push_back(dst);

if (cot==1)

{

BrightDetection brightDet;

brightDet.Detect(inputImage,detectedValue,errorMessage);

//printf("%f\n",detectedValue);

if (detectedValue>=200)

{

printf("alarm--detectedValue: %f\n",detectedValue);

}

else if (detectedValue>=180)

{

printf("attention--detectedValue: %f\n",detectedValue);

}

cot =0;

detectedValue = 0.0;

for (image_list_type::iterator _iteratorForDeal=inputImage.begin();_iteratorForDeal!=inputImage.end();_iteratorForDeal++)

{

IplImage* _imgForDeal=*_iteratorForDeal;

cvReleaseImage(&_imgForDeal);
//先不要释放,最后统一释放

}

for (image_list_type::iterator ir_del=inputImage.begin();inputImage.end()!=ir_del;) //刚开始时,m_curcolortrack_list为空

{

ir_del=inputImage.erase(ir_del);//以容器为单位进行删除,此处就不是以索引号。

}

}

}

为防止频繁申请内存和释放内存,一般一次性将内存申请好,最后用完统一释放。也就是说,针对类中,一般在构造函数中申请好内存,用完后统一在析构函数中释放。这样就能减少申请和释放内存的频率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: