桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

続・WindowsCE開発 (1)

d:id:youandi:20080306#p4
Map File ExplorerApplication Verifier for Windows CEを使いつつ地道にステップ実行して追っかけた結果原因は全て判明。
std::dequeは全くもって無実でしたorz
1つ目はクラスのメンバ変数に193KBの構造体を36個分スタックで宣言していてそのクラスのインスタンス生成時にこけてた。2つ目はCStaticからの派生クラスの問題は、MFCのDoDataExchange()の中で、CStaticからの派生クラスを配列として宣言してその先頭アドレスをCWndにキャストして配列アクセスしていた為に、配列の要素を辿ると追加したメンバ変数のサイズ分1要素毎にずれてしまい不正なアドレス参照していた。後はApplication Verifier for Windows CEでスレッドのハンドルリークが出ていてそれも解消し、Release/Debugビルド共に速度的にも問題無く動作するようになった。
配列アクセスの件は冷静に考えればおかしいんだがそのコードを書いた直後はCStaticのままでやっていたので発見が遅れたのが、丸2日も費やす結果になってしまったなorz