您的位置:首页 > 其它

有关List中pushback()的用法及释放注意事项

2014-07-24 11:17 471 查看
针对创建的list型数据,如:

typedef IplImage image_type;

typedef list< image_type* > image_list_type;

image_list_type inputImage;

当向 inputImage里面加入图像帧进去时:

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); //缩放源图像到目标图像

inputImage.push_back(dst);

由于dst是指针型数据,push_back(dst)只是传进去了一个指针,也就是让inputImage的一个元素(指针)指向由这条语句:dst = cvCreateImage( dst_cvsize, frame->depth,frame->nChannels);
所申请的内存中。

最后,当用完inputImage后,要释放时,得分两步:1.释放指针所指向的内存区域(此时也就释放了由dst = cvCreateImage()所创建的内存);2.删除inputImage元素。

如下:

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);//以容器为单位进行删除,此处就不是以索引号。

}

第二步也可这样:直接inputImage.clear();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: