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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
purin52002
記事: 235
登録日時: 2年前
連絡を取る:

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

#1

投稿記事 by purin52002 » 2年前

こんにちは

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
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
purin52002
記事: 235
登録日時: 2年前
連絡を取る:

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

#2

投稿記事 by purin52002 » 2年前

ue4のコンテナ TArray ではなく、標準コンテナ std::vector を使ったところ、おそらく解決することができました^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

返信

“C言語何でも質問掲示板” へ戻る