ページ 11

GameProg.exe の 0x00000000 でハンドルされていない例外が・・・ と表示されます

Posted: 2012年1月09日(月) 21:40
by きずなん
ただいま2DRPGにチャレンジしてる初心者です。


『GameProg.exe の 0x00000000 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。』

と表示されてしまいます。
エラーを引き起こしてるコード部分は下のようになります。

コード:

	int Image[200];
	LoadDivGraph( "画像/img15_2.png" , 300 , 20 , 15 , 32 , 32 , Image ) ;//画像を16個に分割してImage配列に保存
ここを消せばエラーしないのですが、なんでここでエラーするのか分かりません。
LoadDivGraphは、画像をメモリに保存するだけですよね?
なんで保存しただけでエラーが起きるのかがイマイチ分からないので質問しました。

どこが間違いか、ご指摘お願いします。
一応、コード全文もはっておきます。
(DrawBoxをDrawGraphに変えて、マップチップを分割したものを自由にマップに貼り付けるようにしようとしているところです)

コード:

// マップ表示基本
#include "DxLib.h"

#define MAP_SIZE	32			// マップチップ一つのドットサイズ

#define MAP_WIDTH	20			// マップの幅
#define MAP_HEIGHT	15			// マップの縦長さ

// マップのデータ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] =
{
	{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
	{ 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 } ,
	{ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 } ,
	{ 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 } ,
	{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1 } 
} ;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE); // ウィンドウモードに設定

	int Image[200];
	LoadDivGraph( "画像/img15_2.png" , 300 , 20 , 15 , 32 , 32 , Image ) ;//画像を16個に分割してImage配列に保存

	int i , j ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;		// エラーが起きたら直ちに終了
	}

	// マップを描く
	for( i = 0 ; i < MAP_HEIGHT ; i ++ )
	{
		for( j = 0 ; j < MAP_WIDTH ; j ++ )
		{
			if( MapData[ i ][ j ] == 0 )
			{
				DrawBox( j * MAP_SIZE , i * MAP_SIZE ,
						j * MAP_SIZE + MAP_SIZE , i * MAP_SIZE + MAP_SIZE , 
							GetColor( 255 , 0 , 0 ) , TRUE ) ;
			}
		}
	}

	// キー入力待ち
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}


Re: GameProg.exe の 0x00000000 でハンドルされていない例外が・・・ と表示されます

Posted: 2012年1月09日(月) 21:45
by beatle
画像を16個に分割したいのか300個に分割したいのか,どちらでしょうか.300個に分割したいのだとすると,Imageの要素が200個では足りませんよね.

Re: GameProg.exe の 0x00000000 でハンドルされていない例外が・・・ と表示されます

Posted: 2012年1月09日(月) 22:51
by きずなん
返信ありがとうございます。
300個に分割したいのでImage[300]に変えましたが、やはりまったく同じエラーが起きます。

修正後のコードです。

コード:

// マップ表示基本
#include "DxLib.h"
 
#define MAP_SIZE    32          // マップチップ一つのドットサイズ
 
#define MAP_WIDTH   20          // マップの幅
#define MAP_HEIGHT  15          // マップの縦長さ
 
// マップのデータ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] =
{
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
    { 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 } ,
    { 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 } ,
    { 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 } ,
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1 } 
} ;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int nCmdShow )
{
    ChangeWindowMode(TRUE); // ウィンドウモードに設定
 
    int Image[300];
    LoadDivGraph( "画像/img15_2.png" , 300 , 20 , 15 , 32 , 32 , Image ) ;//画像を300個に分割してImage配列に保存
 
    int i , j ;
 
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;     // エラーが起きたら直ちに終了
    }
 
    // マップを描く
    for( i = 0 ; i < MAP_HEIGHT ; i ++ )
    {
        for( j = 0 ; j < MAP_WIDTH ; j ++ )
        {
            if( MapData[ i ][ j ] == 0 )
            {
                DrawBox( j * MAP_SIZE , i * MAP_SIZE ,
                        j * MAP_SIZE + MAP_SIZE , i * MAP_SIZE + MAP_SIZE , 
                            GetColor( 255 , 0 , 0 ) , TRUE ) ;
            }
        }
    }
 
    // キー入力待ち
    WaitKey() ;
 
    DxLib_End() ;       // DXライブラリ使用の終了処理
 
    return 0 ;      // ソフトの終了
}

Re: GameProg.exe の 0x00000000 でハンドルされていない例外が・・・ と表示されます

Posted: 2012年1月09日(月) 23:04
by softya(ソフト屋)
DxLib_Initの前に読み込んではいけません。

Re: GameProg.exe の 0x00000000 でハンドルされていない例外が・・・ と表示されます

Posted: 2012年1月09日(月) 23:10
by きずなん
なるほど。解決しました!
ありがとうございました。