Amazon 初売り

« あれ?DeleteGraphで解放されないメモリがあるぞ | トップページ | 4個パックのツナ缶が強くて困る »

2012.01.18

DXPのLoadGraph内のLoadPngImageに怪しいところ発見!

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

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)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: DXPのLoadGraph内のLoadPngImageに怪しいところ発見!:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。