ページ 11

[c++][opencv]cv::Matのデストラクタ内で例外

Posted: 2017年6月30日(金) 12:44
by purin52002
こんにちは

opencvのMatを使っていたところデストラクタ内で例外が発生してしまいました。
ヒープが壊れていると言われてしまいます。

コード:

Mat::~Mat()
{
    release();
    if( step.p != step.buf )
        fastFree(step.p);//ここで例外がスローされる
}
直前までの処理を書くと

コード:

struct MatPair
{
    cv::Mat a,b;
};

struct MyStruct
{
    MatPair c,d;
};

TArray<MyStruct> array;//TArray=ue4で提供される可変長配列、std::vector的な

void Add(const MatPair &x, const MatPair &y)
{
    array.Add(MyStruct{x, y});
}

void Func()
{
    array.Sort();//本当はラムダ式を使ってランダムにソートする。今回は省略
    for(auto &i : array)
    {
        //色々処理
        //opencv関係の関数は画像と画像を水平方向に連結するcv::hconcatを使用
    }
    array.Empty();//arrayの中身を消去、この中でcv::Matのデストラクタが呼ばれて例外が出てるっぽい?
}

int main()
{
    //適当にAdd関数をよんだ後にFunc関数を呼ぶ
}
となります。

ヒープが壊れる という例外が出るのは、確保した領域外にアクセスした場合という認識です。
しかし、cv::Matの領域外にアクセスするような処理はしていないつもりです。

[hr]
cv::Matのデストラクタで ヒープが破壊された という例外が出ます。
opencvに関係ありそうな関数はcv::hconcatを使っています。
例外の原因がわかる方が降りました教えてもらえないでしょうか?<(_ _)>
オフトピック
あわせてこちらも確認してもらえるとうれしいです^p^
http://dixq.net/forum/viewtopic.php?f=3&t=19329

Re: [c++][opencv]cv::Matのデストラクタ内で例外

Posted: 2017年7月03日(月) 13:53
by purin52002
ue4のコンテナ TArray ではなく、標準コンテナ std::vector を使ったところ、おそらく解決することができました^^