每帧在shared_ptr中动态分配图像

时间:2011-03-05 00:35:44

标签: c++ boost shared-ptr

我在这里第一次尝试使用shared_ptr,但是我在这方面遇到了一些麻烦。

我希望每帧都获得IplImage并分配给shared_ptr类成员,释放最后一个图像。它是这样的:

class Detector {
public: 
       void Detector::updateImage {
            main_image_.reset(cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 3));
       }
private:
       boost::shared_ptr<IplImage> main_image_;
}

我在循环中调用updateImage。 cvCreateImage为该图像大小动态分配一些内存。

循环第一次运行时,一切正常。现在,我第二次收到_BLOCK_TYPE_IS_VALID断言错误。当shared_ptr尝试删除指针时会发生这种情况。

所以,假设我做错了什么,我尝试了许多其他选项,如:

if (!main_image_) 
    main_image_ = boost::shared_ptr<IplImage> (cvCreateImage...
else
    main_image_.reset(cvCreateImage...)

也没用。尝试首先重置shared_ptr,也没有工作。尝试设置一个新的临时shared_ptr并分配给我的main_image_ ptr。没有成功。

我在哪里错了?使用常规指针并手动释放图像就像魅力一样。

提前致谢,

西奥

1 个答案:

答案 0 :(得分:3)

我假设你在调试版本中看到了这个错误?

cvCreateImage()使用哪种分配内存的方法? newmalloc()boost::shared_ptr使用delete来销毁内存,因此您的系统可能会检测到数据未按“正确方式”分配,即使用new。

如果是这种情况,则必须使用带有自定义删除器的shared_ptr(查看增强文档以获取更多信息),以便正确释放内存。