メモリのアクセス違反のエラーについて

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

メモリのアクセス違反のエラーについて

#1

投稿記事 by こげちゃん » 12年前

はじめまして。
現在ちょっとしたゲームを作っているのですが、メモリのアクセス違反のエラーが出ました。
いつもなら止まった場所とブレイクポイントでどこがダメなのかわかっていたのですが、今回うまくいかずお手上げ状態なため質問させていただきます。

コード:

class cTeam{
private:
	cCharacter* member[12][3];
	cCharacter* order_pos[9];
public:
	~cTeam();
	cTeam();
	bool order();
private:
	cCharacter* get_pos_char(string pos, cCharacter** order_temp, cCharacter** except);
};

cCharacter* cTeam::get_pos_char(string pos, cCharacter** order_temp, cCharacter** except){
	const static string pos_name[9] = {
		"投","捕","一","二","三","遊","左","中","右"
	};
	int pos_num = -1;
	for(int i=0;i!=9;i++){
		if(pos == pos_name[i])
			pos_num = i;
	}
	if(pos_num == -1)
		return NULL;
	cCharacter* result = NULL;
	for(int i=0;i!=36;i++){
		if(order_temp[i] != NULL){
			bool except_flag = false;
			for(int k=0;k!=9;k++){
				if(except[k] == order_temp[i]){
					except_flag = true;
					break;
				}
			}
			if(order_temp[i]->pos[0] == pos_name[pos_num] && except_flag == false){
				if(result == NULL){
					result = order_temp[i];
				}else{//このelse内をコメントアウトしても同じ
					int result_prop[9];
					int temp_prop[9];
					result->proper(result_prop);
					order_temp[i]->proper(temp_prop);
					if(result_prop[pos_num] < temp_prop[pos_num])
						result = order_temp[i];
				}
			}
		}
	}
	return result;
}

bool cTeam::order(){
	cCharacter* order_temp[36];
	for(int i=0;i!=3;i++){
		for(int j=0;j!=12;j++){
			order_temp[j+i*12] = member[j][i];
		}
	}
	for(int i=0;i!=9;i++){
		order_pos[i] = NULL;
	}
	order_pos[0] = get_pos_char("投", order_temp, order_pos);
	order_pos[1] = get_pos_char("捕", order_temp, order_pos);
	order_pos[2] = get_pos_char("一", order_temp, order_pos);
	order_pos[3] = get_pos_char("二", order_temp, order_pos);
	order_pos[4] = get_pos_char("三", order_temp, order_pos);
	order_pos[5] = get_pos_char("遊", order_temp, order_pos);
	order_pos[6] = get_pos_char("左", order_temp, order_pos);
	order_pos[7] = get_pos_char("中", order_temp, order_pos);
	order_pos[8] = get_pos_char("右", order_temp, order_pos);
	return true;
}
上記コードで実行するとget_pos_char内のreturnで止まり、
hoge.exe の 0x010500d6 で初回の例外が発生しました: 0xC0000005: 場所 0x00620000 を読み込み中にアクセス違反が発生しました。
hoge.exe の 0x77b115de でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00620000 を読み込み中にアクセス違反が発生しました。
といったエラーが出ます。
厄介なことに毎回毎回発生するわけでなく、発生の原因を探すため色々やってみたのですが、エラーが起こる規則すらわかりませんでした。
どなたか原因を教えていただける方はいらっしゃいませんでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: メモリのアクセス違反のエラーについて

#2

投稿記事 by h2so5 » 12年前

cCharacterクラスの実装や、memberをどこで初期化しているのかが分からないので何ともいえないです。
もっと詳細なコードを添付してください。

珈琲

Re: メモリのアクセス違反のエラーについて

#3

投稿記事 by 珈琲 » 12年前

ブレークポイントで止まっている時にステップイン(F10キー)やステップアウト(F11キー)は使いましたか?
マルチスレッド出ない限りエラーが起きる行までは特定できるとおもいます。

閉鎖

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