ページ 11

メモリの上書き

Posted: 2009年11月29日(日) 14:16
by やっくん
こんにちわ。
DXライブラリを使用していて、以下のソースでメモリの問題が発生したのですが自分ではどうなっているかわからないのでご教授お願いします。
-------ソース---------
mahou_txt_reading();

/* ダメージ画像 */
for(i = 0; i < 10; i++){
  sprintf(fname, "damage%d.bmp", i);
  effect_damage = LoadGraph(fname);
}

------------------------
mahou_txt_reading()では
魔法名
魔法の説明
1,3,3,50,360
の3行分×15個のテキストデータを構造体のメンバに読み込んでいます。
読み込んだ後、各メンバを画面に出力したら問題なく全て表示されます。
ですが、
その後の「ダメージ画像読み込み」という部分で10枚の画像を読み込んだ後、
魔法のデータを入れている一つ目のメンバに全く関係ない文字[.]が上書きされて入ってきました。
この二つの読み込みの間にも同じような手法で別の画像を多く読み込んでいます。
そこまでは問題なかったのですが、「ダメージ画像読み込み」を追加したらこのような現象がおこりました。
これはどうしてでしょうか?

Re:メモリの上書き

Posted: 2009年11月29日(日) 14:59
by MNS
変数fnameはchar配列だと思うのですが、
その配列の容量は十分確保されていますか?

Re:メモリの上書き

Posted: 2009年11月29日(日) 16:16
by やっくん
はい。
char fname[256];
と宣言しています。
ちなみに、ソースで
sprintf(fname, "damage%d.bmp", i);
effect_damage = LoadGraph(fname);
とありますが、ここでの
damage%d.bmp

dat/gazou/effect/damage/damage%d.bmp
を略して書いています。
ですが、fnameに十分入りきれる量なので大丈夫かと思います。
同じ関数内でfnameを1箇所使いまわしているので使っている部分を載せます。
// 敵画像を読み込み
for(i = 0; i < ENEMY_MAX; i++){
  sprintf(fname,"dat/gazou/enemy/enemy%d_0.png",i + 1);
  en.image = LoadGraph(fname);
}


これは「ダメージ画像読み込み」で処理していますが、fname[256]で十分足りています。
また、「敵画像読み込み」の処理後に問題となっているメンバを表示させても正常に表示されています。

Re:メモリの上書き

Posted: 2009年11月29日(日) 16:24
by softya
何処かの配列の要素数が足らないとしか思えません。
関連する全てのソースを開示してください。

Re:メモリの上書き

Posted: 2009年11月29日(日) 17:18
by やっくん
>何処かの配列の要素数が足らないとしか思えません。
おっしゃる通りでした><
ヘッダーで「ダメージ画像読み込み」の処理で使う変数effect_damageを宣言してたのですが、要素数が足りませんでした。書き直すと動きました。

MNSさん、softyaさんありがとうございました。
解決とします。