Pointers IplImage变量在我添加到向量时被覆盖

Pointers IplImage变量在我添加到向量时被覆盖,pointers,boost,Pointers,Boost,嗨,伙计们,每次我从相机中提取一帧时,我都试图在向量中添加一个IplImage,但不知何故,我向量中存储的IplImage总是被最新的帧覆盖 我要存储的变量是image.get,其中image定义为 boost::scoped_ptr<IplImage> image(cvCreateImage(size, IPL_DEPTH_32F, 1)); 之后,我尝试将图像保存为缓冲区中每个变量的png格式,发现图像是相同的 我认为这应该是一个指针问题,因为我在尝试将整数保存到另一个向量中时

嗨,伙计们,每次我从相机中提取一帧时,我都试图在向量中添加一个IplImage,但不知何故,我向量中存储的IplImage总是被最新的帧覆盖

我要存储的变量是image.get,其中image定义为

boost::scoped_ptr<IplImage> image(cvCreateImage(size, IPL_DEPTH_32F, 1));
之后,我尝试将图像保存为缓冲区中每个变量的png格式,发现图像是相同的

我认为这应该是一个指针问题,因为我在尝试将整数保存到另一个向量中时没有问题


有没有关于如何将不同的图像存储到向量中的建议?提前感谢

请稍候。你知道scoped_ptr是做什么的吗

我想你是因为图像被删除了。下次抓取屏幕截图时,分配的内存可能恰好位于同一位置,这会导致旧的悬空指针似乎指向最新的屏幕截图

要么不使用指针,要么使用智能指针:

cv::vector< boost::scoped_ptr<const IplImage*> > buffer;
另见:

为了艺术;这可能有助于解释作用域的_ptr如何使指针悬空 非常笼统:

buffer.push_back(image.get());
IplImage const* store_this_somewhere; // e.g. in your vector
{
    boost::scoped_ptr<IplImage> image(cvCreateImage(size, IPL_DEPTH_32F, 1));

     store_this_somewhere = image.get();

 } // HERE `image` is destructed and **deletes** the image

 // store_this_somewhere is **dangling** here and dereferencing it is 
 // UB
cv::vector< boost::scoped_ptr<const IplImage*> > buffer;