メモリの上書き

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
やっくん

メモリの上書き

#1

投稿記事 by やっくん » 15年前

こんにちわ。
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枚の画像を読み込んだ後、
魔法のデータを入れている一つ目のメンバに全く関係ない文字[.]が上書きされて入ってきました。
この二つの読み込みの間にも同じような手法で別の画像を多く読み込んでいます。
そこまでは問題なかったのですが、「ダメージ画像読み込み」を追加したらこのような現象がおこりました。
これはどうしてでしょうか?

MNS

Re:メモリの上書き

#2

投稿記事 by MNS » 15年前

変数fnameはchar配列だと思うのですが、
その配列の容量は十分確保されていますか?

やっくん

Re:メモリの上書き

#3

投稿記事 by やっくん » 15年前

はい。
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]で十分足りています。
また、「敵画像読み込み」の処理後に問題となっているメンバを表示させても正常に表示されています。

softya

Re:メモリの上書き

#4

投稿記事 by softya » 15年前

何処かの配列の要素数が足らないとしか思えません。
関連する全てのソースを開示してください。

やっくん

Re:メモリの上書き

#5

投稿記事 by やっくん » 15年前

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る