はかせのラボ

私の頭の中を書いていく雑記ブログです

DirectX バグが取れない

あいさつ

どうも、はかせです。
今回は前回話したメモリ増加問題のデバッグです。

犯人探し

デバッグはまず犯人を捜さなければいけません。
探し方は簡単です。

怪しいところに目途をつけてコメントアウトして
メモリ増加量を観察して怪しい増加をしていたら
さらに範囲を狭めて...これを繰り返します。

これでよっぽど複雑で難しい問題でない限り
犯人を見つけられると思います。

犯人

今回の問題の犯人はローカル変数でした。
ローカルで確保した構造体やストリームが
何故かスコープを抜けても解放されていないのです。

今だこの問題は解決できていません。
デストラクタにブレークポイント貼って
普通にやっても明示的に呼んでも処理止まらないし
もしかしたら構造体自体に何か問題があるのかなとか思い始めてます。

あと同じことがstd::wstringstreamにも起こっています。
これはdouble型のスコアやfpsをwstring型に変換するのに使用しているんですが
こちらもスコープ抜けてもメモリが確保されっぱなしになっているようです。

ググってみてもいまいち欲しい情報が手に入らず
手元で色々がちゃがちゃやっても望む結果にならず
結構困っています。

あとがき

今回はバグの犯人は見つけたが逮捕できない話でした。
構造体に関しては最悪構造体を作り直してやればいいかなと思っていますが
ストリームの方は正直どうしたもんかと頭を悩ましています。

インスタンスを作らずdouble型をwstring型に変換できればいいんですけどね。
(ToString()的なメソッドが欲しい)
まぁないものねだりしても仕方ないので色々試してやってみます。

それでは今回はこの辺でノシ