VC 2015 Release.exe で 0xC0000005
今まで VC 2013 だったプロジェクトを VC 2015 に.
Release 版を実行するとエラーに.
0x006F3947 で例外がスローされました (FBXtoM.exe 内): 0xC0000005: 場所 0xFFFFFFFF の読み取り中にアクセス違反が発生しました
この例外のハンドラーがある場合は、プログラムを安全に続行できます。
Debug 版では問題ない.また,VC 2013 Release 版も通る.
変数 bp がおかしくなっているっぽいがよくわからない.
このプロジェクトは FBX SDK を使用しているため,VC が限定される.
そのため,この部分の単体テスト用のプロジェクトがあったのでそれを VC 6 から順にビルド.
やはり,VC 2015 では実行時エラーとなる.VC 2017 は通る.
検索すると「VC 2015 の問題」と思われる情報があった.
Visual Studio 2015 および Visual C++ 2017 のリンク時のコード生成における最適化の不具合について
今使っている VS 2017 のバージョンは 15.9.13 .
単体テストプロジェクトで,書かれていた回避策を試したが効果なし?
コンパイルの「最適化」で「実行速度の最大化(/O2)」を「サイズの最小化(/O1)」に変更して通る様にはなった.
次の様に bp を求める部分を使用する直前に移動して対応.
if (0<=lv && 0<=bv) {
// Vd3 bp = lp-be.lll() ;
bi->SetLV1(bIndex,lv) ;
bi->SetLV2(bIndex,lv) ;
bi->SetLP1(::ToP3(lp)) ;
bi->SetLP2(::ToP3(lp)) ;
bi->SetBV1(bv) ;
bi->SetBV2(bv) ;
Vd3 bp = lp-be.lll() ;
bi->SetBP1(::ToP3(bp)) ;
bi->SetBP2(::ToP3(bp)) ;
}