DXPのLoadGraph内のLoadPngImageに怪しいところ発見!
DadrfyさんのDX Library Portable kai v3.2にある関数
MakeGraphFromScreenで作った画像ハンドルは問題なく
DeleteGraph後に完全解放されているので
怪しいのはDeleteGraphじゃない気がした。
そこで空きメモリチェック関数を1024バイト単位ではなく
1バイト単位にしてから
LoadGraphに焦点を絞って調べてみた。
LoadDivGraphでも内部的にLoadGraphを使っているので
LoadGraphが怪しいだろうと思ったからだ。
「初音ミク冒険記」で調べるのは、正直確認しづらかったので
確認用のちょっとしたプログラムを作って確認。
昨日、記事にした宝珠の画像1つに絞って調べてみる。
すると解放されないメモリサイズ1566に近いサイズのmallocに気付いた。
実際にmallocで確保しているのは1560バイト。
6バイト合わないけど、解放していないポインタのサイズとかの
問題かもしれないと想像。
問題の箇所は、loadgraph.cのLoadPngImage関数のbuf。
bufはローカル変数でparams.srcにアドレスを渡している。
paramsは、dxppng_decodeの引数なのでdxppng_decodeも確認。
srcを解放しているところは無い。
エラー時にはbufをfreeしているのだが
正常時にはfreeしていない。
やはりここが怪しいだろう。
そこで正常時のリターン
return texptr;
の直前に
free(buf);
と書いて確認してみる。
おぉ!
DeleteGraph後の空きメモリサイズが
LoadGraph前の空きメモリサイズ値とピッタリ同じになった!
一応、初音ミク冒険記とリンクして通しプレイし
第1章クリア後も数回セーブデータをロードしたりしてから
ログを確認してみる。
うん、どうやら「画像関連でのメモリ関連のおかしい」のはなくなったみたい。
なんか、それとは別に空きメモリが減っていっているようだが
おそらくLua関連の問題じゃないかなと想像している。
そもそもLua関連はロードしっぱなしで解放とか作っていないからな。
まぁ、それは次の問題と言うことで。
猫山Pの「png画像の読込&削除を繰り返すと挙動がおかしくなる」が
これで解決すれば完璧にコレが原因だと思う。
| 【固定リンク】 | 【コメント (0)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: DXPのLoadGraph内のLoadPngImageに怪しいところ発見!:
コメント
このブログの新着コメントをRSSリーダに登録する為のxml