返信ありがとうございます。
arrayに追加する部分が問題という可能性は大いにあります(既存の関数より、自作の関数を疑うほうが早いですよね^^;)
arrayに追加する部分は大まかに書いて以下のようになります。
コード:
struct MatPairPlus
{
cv::Mat a, b;
UTextureRendertarget2D *c, *d;
MatPairPlus(const UTextureRendertarget2D *x, const UTextureRendertarget2D *y)
{
xからaを作る
yからbを作る
}
};
struct MyStruct
{
MatPairPlus e, f;
}
void Add(MatPairPlus original_state, MatPairPlus transition_state)
{
MatPairPlus original(original_state.c, original_state.d);
MatPairPlus transition(transition_state.c, transition_state.d);
array.push_back(MyStruct{original, transition});
}
最初の質問文で定義したMatPairをMatPairPlusと定義し直します。
今回ue4のテクスチャからcv::Matの画像を作成しようと思っています。
しかし、cv::hconcatの例外とは関係ない情報かと思いまして勝手に省きました。
混乱させてしまったら申し訳ないですorz
また、arrayに追加するのもMatPairPlusを更に構造体にしたMyStructになります。
arrayの方が変わることで、Func関数の中身も変わります。
コード:
void Func()
{
for(auto &i : array)
{
auto e = i.e;
auto f = i.f;
auto combined_e = Combine(e.a, e.b);
auto combined_f = Combine(f.a, f.b);
}
array.clear();
}
こちらが結構重要で、 e で Combine を行うと例外が出ることを確認できました。(もしかして f でも出るのかもしれないけど^p^)
私が真っ先に疑ったのがMatPairPlusのコンストラクタです。
しかし、こちらは正常(?)なようで、Add関数内で
コード:
void Add(MatPairPlus original_state, MatPairPlus transition_state)
{
MatPairPlus original(original_state.c, original_state.d);
MatPairPlus transition(transition_state.c, transition_state.d);
array.push_back(MyStruct{original, transition});
auto im_o = Combine(original.a, original.b);
auto im_t = Combine(transition.a, transition.b);
cv::imshow("o", im_o);
cv::imshow("t", im_t);
cv::waitKey();
}
のようにして画像が壊れていないかを確認したところ、例外が出ずにすべて表示されました。
しかし、Func関数内で e をCombineしようとすると例外が出てしまいます。
他に原因として何がありそうですか?^^;