ページ 11

C++ VisualC++ 2010 アクセス違反

Posted: 2013年3月16日(土) 21:01
by よよよよよおy
C++  VisualC++ 2010 DXライブラリでゲームを作っています
デバックすると閉じた後に

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

と出ます。どうすれば治りますか。
Main.cpp

コード:

#include "DxLib.h"
#include "Gamen.h"
#include "Kye.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	if( ChangeWindowMode(TRUE) != 0 ){
		return 0;
	}
    if( DxLib_Init() != 0 ){
		return 0;
    }
	if( SetDrawScreen( DX_SCREEN_BACK ) != 0 ){
		DxLib_End();
        return 0;
    }
	while( 1 ){
		if(ScreenFlip() != 0){
			break;
		}
		if( ProcessMessage() != 0 ){
            break;
        }
        if( ClearDrawScreen() != 0 ){
            break;
        }
		if( Onoff() != 0 ){
			break;
		}

		Kyeget();
		Gamen();
		Pro();

	}
	DxLib_End();
	return 0;
}

Kye.cpp

コード:

#include "DxLib.h"
#include "Gamen.h"

static int Pad;
static int get[28];

void Kyeget(){
	Pad = GetJoypadInputState( DX_INPUT_KEY_PAD1 );
	for(int i = 0; i<28; i++){
		if( Pad & (1<<i) ){
		get[i]++;
		}else {
		get[i] = 0;
		}
	}
}

int Kye( int date ){
	return get[date];
}
Kye.h

コード:

void Kyeget();
int Kye( int date );
Gamen.cpp

コード:

#include "DxLib.h"
#include "Gamen.h"
#include "Kye.h"
#include "Menu.h"

static FLGs Flg = FLG_Menu;
static int onoff = 0;

void Gamen(){
	switch( Flg ){
	case FLG_Menu:
		Menu_Ga();

		break;
	case FLG_Game:


		break;
	case FLG_Sti:


		break;
	case FLG_Date:


		break;
	}
}
void Pro(){
	switch( Flg ){
	case FLG_Menu:
		Menu_Pro();

		break;
	case FLG_Game:


		break;
	case FLG_Sti:


		break;
	case FLG_Date:


		break;
	}
}
void Hensin( FLGs tugi ){
	Flg = tugi;
}
void Off(){
	onoff = 1;
}
int Onoff(){
	return onoff;
}
Gamen.h

コード:

typedef enum {
    FLG_Menu,    //メニュー画面
    FLG_Game,    //ゲーム画面
    FLG_Sti,  //設定画面
	FLG_Date,
} FLGs ;

void Gamen();
void Pro();
void Hensin( FLGs tugi );
void Off();
int Onoff();
Menu.cpp

コード:

#include "DxLib.h"
#include "Gamen.h"
#include "Kye.h"
static int siy = 100;
static int se = LoadSoundMem("sozai/sentaku.ogg");
void Menu_syo(){
	siy = 100;
}
void Menu_Ga(){
	DrawString( 150 , 100 , "ゲームスタート" , GetColor( 255 , 255 , 255 ) );
	DrawString( 150 , 150 , "おまけ" , GetColor( 255 , 255 , 255 ) );
	DrawString( 150 , 200 , "ヘルプ" , GetColor( 255 , 255 , 255 ) );
	DrawString( 150 , 250 , "コンフィグ" , GetColor( 255 , 255 , 255 ) );
	DrawString( 150 , 300 , "終了" , GetColor( 255 , 255 , 255 ) );
	DrawString( 120 , siy , "■" , GetColor( 255 , 255 , 255 ) );
}

void Menu_Pro(){
	if(siy != 300 && Kye(0) == 1){
	siy += 50;
	PlaySoundMem( se, DX_PLAYTYPE_BACK );
	}else if(siy == 300 && Kye(0) == 1){
	siy = 100;
	PlaySoundMem( se, DX_PLAYTYPE_BACK );
	}
	if(siy != 100 && Kye(3) == 1){
	siy -= 50;
	PlaySoundMem( se, DX_PLAYTYPE_BACK );
	}else if(siy == 100 && Kye(3) == 1){
	siy = 300;
	PlaySoundMem( se, DX_PLAYTYPE_BACK );
	}
	if(Kye(4) == 1){
		switch( siy ){
		case 100:
			Off();
			break;
		case 150:
			Off();
			break;
		case 200:
			Off();
			break;
		case 250:
			Off();
			break;
		case 300:
			Off();
			break;
		}
	}
}
Menu.h

コード:

void Menu_syo();
void Menu_Ga();
void Menu_Pro();
長文すいません

Re: C++ VisualC++ 2010 アクセス違反

Posted: 2013年3月17日(日) 10:25
by softya(ソフト屋)
残念ながら当方では再現しませんです。
あと落ちるような問題らしき点も見つけられませんでした。

・DxLib_Init前に読み込まれるので再生されてないと思います。
static int se = LoadSoundMem("sozai/sentaku.ogg");


気になったのはファイル名、変数名なんかですね。
・FLGs 無理して1文字縮めなくて良いです。 FLAGsでよろしいかと
・Kye Keyが正しいです。
・date dataの事だと思います。dateは日付です。
・FLG_Sti FLAG_Settiのことでしょうか?無理して縮めない方が良いです。
・siy が意味不明です。
・インデントが正しくないところがたくさんあります。
・Pro、Menu_Ga、Menu_Pro なんの略かわかりません。略さないほうが良いでしょう。

関数名は、名詞+動詞を基本にしたほうが良いと思います。
例えばMenu_Draw()とかMenu_Print()とかMenu_Byouga()でも良いですが、統一性を持たせてください。