OpenCV+VS2012上でstd::vectorがassertion errorを起こす

logo

以前VS2010で作成したC++のプログラムを動かしてみたらstd::vectorの値の操作をおこなうあたりで Debug Assertion Failed: _CrtIsValidHeapPointer(pUserData) を吐いて止まってしまいました.環境はWindows7,OpenCV2.4.9,Visual Studio 2012.以前は動いていたはず・・・といろいろコードを書き換えて試してみても,全く改善されず途方に暮れていたところ,下記の情報を見つけました.

OpenCV incompatable with std::vector? (_crtIsValidHeapPointer error)

どうやらWindows用のOpenCVはVS2010(Version 10)でビルドされており,VS2012で作ったコードはデフォルトではVS2012用のCRT(Version 11)にリンクされるため,不整合が起こってエラーを吐くということのようです.解決方法としては,上記ページにあるように,プロジェクトのプロパティから,「構成プロパティ」→「全般」→「プラットフォーム ツールセット」でVisual Studio 2010(v100)を選択すれば良いです.実際,私のコードも問題なく動きました.

(注:上記だけを変更すると今度はOpenCVのbinのバージョンなどとの不整合が起こるので,システム環境変数やライブラリへのリンクも全てvc10に統一しないといけないですね.結局,VS2012の上でVS2010のプログラムをコンパイルする状態になるのでしょうか)

こういうのは本職の方には常識なのかもしれないですが,私のような,必要な時にしか触らない人間にはなかなか気づけないですね・・・