トップページ > コンテンツ > その他のAPI、ライブラリ関係 > Opencv関連 > デバッグ系 > Bad argumentエラー

既に解放済みのIplImageを解放しようとcvReleaseImageをしようとした時にこのエラーが出てしまった。
cvRelease系はいまだに謎が多い。

実際に遭遇したケースでは、
ClassA {
 …略
 public:
   void func();
};
void func() {
   IplImage* test;
   ClassB obj(test);
   obj.func();
   cvReleaseImage(&test);
}

ClassB {
…略
public:
   ClassB();
   ~ClassB();
};
ClassB::ClassB(IplImage* image)
:image(image){
}
ClassB::~ClassB() {
   cvReleaseImage(&image);
}
といった感じでClassBで既に使用済みにしていたのに、
ClassAで解放しようとしたケース。


class呼び出し元に影響を与えないようにするには、
初期化の際に
ClassB {
    public:
    ClassB();
    ~ClassB();
};
ClassB::ClassB(IplImage* shoki) {
   image = cvCreateImage(cvGetSize(shoki),IPL_DEPTH_8U,3);
   cvCopy(shoki,image,0);
}
ClassB::~ClassB() {
   cvReleaseImage(&image);
}
等として別にIplImage領域を確保しておいてコピーするか、
そもそもcvReleaseImageを行わないかしないといけないようだ。
後者は何となくメモリリークしてて恐いが、実際どうなのだろう?
最終更新:2011年04月03日 18:57