malloc関数の使い方
Posted: 2012年7月12日(木) 02:32
こんばんは。VC++2010でC言語を使ってゲームを作成しています。
そこで、リスト構造のメモリ領域の確保をしているのですが、いまいちできてるのかわかりません・・。
見ようとしても、確保できてるのか見えないし・・。
このプログラムで正常に確保できてるでしょうか?
そもそも、この場合でも確保するべきなのでしょうか?
ちなみに、このプログラムは、画像のロードを行うプログラムです。
また、今後作る予定のプレイヤー関数で、Image構造体をポインタで使いたいのですが、関数内で設定するべきですか?
そうすると、敵関数でImage構造体を使いたいときも、関数内でいちいち設定しないとだめですか?
ポインタをたくさん使うプログラムは初めて作るので、いろいろ間違っていたりするかもしれませんので、
ここをこう直したほうがいいなど、アドバイスもお願いします・・。
長々を申し訳ございませんが、ご返答待ってます
そこで、リスト構造のメモリ領域の確保をしているのですが、いまいちできてるのかわかりません・・。
見ようとしても、確保できてるのか見えないし・・。
このプログラムで正常に確保できてるでしょうか?
そもそも、この場合でも確保するべきなのでしょうか?
ちなみに、このプログラムは、画像のロードを行うプログラムです。
//初期化
void Image_Initialize(ImageData *image_s){
//データ初期化
image_s[0].next = &image_s[1];//ダミー
//プレイヤー歩行データ
image_s[1].img = LoadGraph( "media\\player1.png",TRUE);
image_s[1].size_x = 300/3;
image_s[1].size_y = 200;
image_s[1].radius = 50/2;
image_s[1].num = 2;
image_s[1].next = &image_s[2];
//プレイヤー構えデータ
image_s[2].img = LoadGraph("media\\player2.png",TRUE);
image_s[2].size_x = 300;
image_s[2].size_y = 200;
image_s[2].radius = 50/2;
image_s[2].num = 2;
image_s[2].next = &image_s[3];
image_s[3].next = NULL;//ダミー
}
//エラーチェック(エラーを探索)
int ImageError_calc( ImageData *Data ){
struct ImageData *Image_wp=Data;//仕事領域
Image_wp->next = Data->next; //データへ侵入
//データがなくなるまで探索
while( Image_wp->next != NULL ){
if( Image_wp->img == -1 ){
return -1;//読み込めない(-1を返す)
}
Image_wp = Image_wp->next;//次のデータへ侵入
}
return 0;
}
static const int IMG_DATA = 4;
//ロード管理
void Mgr_Load(){
//メモリ領域確保
struct ImageData *image_s =
( struct ImageData * )malloc( sizeof( struct ImageData ) * IMG_DATA );
if( image_s == NULL ){//メモリ不足
MessageBox( NULL, "メモリが不足しています。スタック領域を確保できません。", "memory cannot ", MB_OK);
exit(1);
}
//エラーチェック
int error_ans = 0;
Image_Initialize( image_s );//プレイヤーデータ読込
error_ans = ImageError_calc( &image_s[0] );//エラー判定
if( error_ans == -1 ){//結果がエラーなら
MessageBox( NULL, "ファイルが読み込めません。プログラムを終了します。", " file not found", MB_OK);
exit(1);
}
free(image_s);//領域解放
}
そうすると、敵関数でImage構造体を使いたいときも、関数内でいちいち設定しないとだめですか?
ポインタをたくさん使うプログラムは初めて作るので、いろいろ間違っていたりするかもしれませんので、
ここをこう直したほうがいいなど、アドバイスもお願いします・・。
長々を申し訳ございませんが、ご返答待ってます