Я пытаюсь использовать 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. Нет успеха
Где я здесь не так? Использование обычных указателей и выпуск изображения вручную работали как шарм.
Заранее спасибо,
Тео