エラーが出るのですが

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

エラーが出るのですが

#1

投稿記事 by ひよこ » 16年前

昨日教えてもらったようにして簡単な鍵盤を作ったのですが。DxLib.exe の実行中に途中から 0x00558bb8 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 に書き込み中にアクセス違反が発生しましたって出てきて動かなくなるのですが。下のプログラムなんですが。どうすればいいのでしょうか。プログラムは画像を使わないと何にも起きないのですが。
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;              // ウィンドウモード
        if( DxLib_Init() == -1 ) return -1;     // 初期化



 
       
        char KeyBuf[ 256 ] ;
      //音符
		int Sound ;

        Sound = LoadSoundMem( "do.ogg" );      //wavファイルを読み込み、ハンドルをint型変数へ格納
int Sound1 ;

        Sound1 = LoadSoundMem( "re.ogg" ); 

int Sound2 ;

        Sound2 = LoadSoundMem( "mi.ogg" ); 

int Sound3 ;

        Sound3 = LoadSoundMem( "fa.ogg" ); 
int Sound4 ;

        Sound4 = LoadSoundMem( "so.ogg" ); 
int Sound5 ;

        Sound5 = LoadSoundMem( "ra.ogg" ); 
int Sound6 ;

        Sound6 = LoadSoundMem( "si.ogg" );
int Sound7 ;

        Sound7 = LoadSoundMem( "do2.ogg" ); 		
 while( 1 ){
                GetHitKeyStateAll(KeyBuf  ) ;                   // すべてのキーの状態を得る

       
if(KeyBuf[KEY_INPUT_A]==1) {
        if(CheckSoundMem(Sound)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound,DX_PLAYTYPE_BACK);  //音を再生する
                                
}
if(KeyBuf[KEY_INPUT_B]==1) {
        if(CheckSoundMem(Sound1)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound1,DX_PLAYTYPE_BACK);  //音を再生する
                                
}
 if(KeyBuf[KEY_INPUT_C]==1) {
        if(CheckSoundMem(Sound2)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound2,DX_PLAYTYPE_BACK);  //音を再生する
                                
}
if(KeyBuf[KEY_INPUT_D]==1) {
        if(CheckSoundMem(Sound3)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound3,DX_PLAYTYPE_BACK);  //音を再生する
                                
}
if(KeyBuf[KEY_INPUT_E]==1) {
        if(CheckSoundMem(Sound4)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound4,DX_PLAYTYPE_BACK);  //音を再生する
                                
}
if(KeyBuf[KEY_INPUT_F]==1) {
        if(CheckSoundMem(Sound5)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound5,DX_PLAYTYPE_BACK);  //音を再生する
                                
}
if(KeyBuf[KEY_INPUT_G]==1) {
        if(CheckSoundMem(Sound6)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound6,DX_PLAYTYPE_BACK);  //音を再生する
                                
}
if(KeyBuf[KEY_INPUT_H]==1) {
        if(CheckSoundMem(Sound7)==0)  //現在音が再生されていなければ
                                        PlaySoundMem(Sound7,DX_PLAYTYPE_BACK);  //音を再生する
                             
}
//音符

 int image;                               //ハンドルを受け取るためのint型変数を宣言
        image = LoadGraph( "background0.png" ) ;       //char.pngのハンドルを代入
        DrawGraph( 0 , 0 , image , FALSE ) ;      //画像を表示


                if(KeyBuf[KEY_INPUT_ESCAPE]==1)
                        break ;

                if( ProcessMessage() == -1 ) break ;//エラーが起きたら終了
        }

        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
}

kazuoni

Re:エラーが出るのですが

#2

投稿記事 by kazuoni » 16年前

Load系は昨日も書いたかもしれませんが、
大抵の場合一度だけでよいです。

ひよこ

Re:エラーが出るのですが

#3

投稿記事 by ひよこ » 16年前

Load系もよくわからないのですが、
ではどうすればいいのでしょうか。

Dixq (管理人)

Re:エラーが出るのですが

#4

投稿記事 by Dixq (管理人) » 16年前

まず沢山書かずに少しずつ考えて見ましょう。
あれからゲームプログラミングの館はご覧になったでしょうか?

まず、

1. 画像を上から下に徐々に移動するだけのプログラムを書いて下さい。

2. 今度は裏画面処理を使って画像を上から下に徐々に移動するだけのプログラムを書いて下さい。

3. Zキーが押されれいる間DrawStringで「押されています」と表示するプログラムを書いて下さい。(裏画面処理使う)

4. Zキーが押された瞬間一度だけ「押されました」とprintfDxで表示するプログラムを書いて下さい。(裏画面処理使う)

5. Aキーが押された瞬間一度だけドの音が鳴るプログラムを書いて下さい。(裏画面処理使う)

この5問を解いていけば自然に実装出来るはずです。
まずは館を見ながらやってみて、つまったらどこで詰まったか具体的に教えて下さい。
詰まっていなくても、回答を載せてもらったら添削しますよ。

SCI

Re:エラーが出るのですが

#5

投稿記事 by SCI » 16年前

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    ChangeWindowMode(TRUE);
    if (DxLib_Init() == -1) return -1;
       
    char KeyBuf[256];

    int Sound;
    Sound = LoadSoundMem("do.ogg");
    int image;
    image = LoadGraph("background0.png");

    while (1)
    {
        GetHitKeyStateAll(KeyBuf);

        if (KeyBuf[KEY_INPUT_A] == 1)
            if (CheckSoundMem(Sound) == 0) PlaySoundMem(Sound, DX_PLAYTYPE_BACK);

        DrawGraph(0, 0, image, FALSE);

        if (KeyBuf[KEY_INPUT_ESCAPE] == 1) break;
        if (ProcessMessage() == -1) break;
    }

    DxLib_End();
    return 0;
}
とりあえず、音を1つに減らしてLoadGraphをループ外に引っ張り出しました。
BCC 5.5 でコンパイル・動作確認して正常でした。
このコードをコンパイル・実行してみてください。

ひよこ

Re:エラーが出るのですが

#6

投稿記事 by ひよこ » 16年前

コンパイル・実行できました。SCIさんありがとうございます。
Dixqさん問題ができたら解答します。よろしくおねがいします。

閉鎖

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