ページ 11

リリースビルドでの動作不良

Posted: 2010年1月30日(土) 23:48
by kaiten
自力で解決できる気がしないので質問させていただきます。
息抜きにシーン遷移のプログラムを作っていたのですが、デバッグビルドでは正常に動くのにリリースビルドだとアクセス違反が起こるという状況になってしまいました。
デバッグ情報を付加して試してみたところxtree内にあるinsertで問題が起きているようです。
エラーが発生するのはGame.cpp内のvoid GameSystem::StringInit()のSET_STRING(Sceneitle);です。マクロの内部でSetStringChange<Sceneitle>("Sceneitle");を呼んでおり、この時にアクセス違反が起きているようです。
ソースはまとめてzipにして添付します。当方の環境に問題があるのかそれ以外なのかすらわからないのでこのようにさせていただきました。
考えうる原因とその対処法を教えていただけると幸いです。
環境はvista、VC++2008EESP1、DxLib使用です。

別件なのですが、ResEditを使って画像をリソース化したところ奇妙な画像になってしまったのでこちらも教えていただけると幸いです。画像は少なくともデバッグ版なら見れると思います。右側が正常な画像です。


追伸:重すぎたのでソースのみzipにして添付しました 画像

Re:リリースビルドでの動作不良

Posted: 2010年1月31日(日) 09:46
by MNS
void Change<SceneEnd>(){stack.Change(new SceneEnd(manager) );}
この関数について、例外処理を組み込んでみて、newの確保に失敗していないかどうか、調べてみてください。

Re:リリースビルドでの動作不良

Posted: 2010年1月31日(日) 12:54
by Justy
 えーと、DxLibPCH.hで _SECURE_SCL定義をしていますが、これをするなら
全てのソースで行って下さい。

 xtreeの insertということは多分 std::mapだと思いますが、これがインスタンス化された
ときのソースと、実際に使用しようとしたときのソースでこの定義があるかないかで、
std::mapの中身が変わります。

 そこで insertを呼び出そうとしておかしくなったのではないでしょうか。

CRT セキュリティ強化対応: RH1FFT blog
http://cessna373.asablo.jp/blog/2008/01/03/2543708

Re:リリースビルドでの動作不良

Posted: 2010年1月31日(日) 15:13
by kaiten
おかげさまで解決しました
本題は解決したので解決マーク付けておきます。

>>MNSさん
試してみましたがnewの例外は出ていなかったようです。
例外処理は苦手で避けていたのですが今後はまずやってみようと思います。ありがとうございました。

>>Justyさん
_SECURE_SCLを取り除いてみたところ正常に動作しました。説明の載っているページまでありがとうございました。