[ハンドルされていない例外が発生しました]とエラーが出る

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

[ハンドルされていない例外が発生しました]とエラーが出る

#1

投稿記事 by Hid » 14年前

自分は初心者なのですが、グローバル変数を使わないようにと色々やっていたところどうしても上手くいかないので
ここで尋ねさせていただきます。
必要だと思われるプログラムを抜粋して書きます。

コード:

class CGame{
 int state;
public:
 int GetState(){return state;}
};

class CBoss{
 int t;
public:
 CGame *game;
 void State_copy();
};

void CBoss::State_copy(){
 t = game->GetState();
やりたい事は「CBossのクラス内のメンバ変数に、別のクラスの特定のメンバ変数を参照すること」です。
今回の場合、CBoss内メンバ変数tに、CGame内のメンバ変数stateを代入したいのですが、プログラムを実行すると
○○.exe の 0x00595b36 で初回の例外が発生しました: 0xC0000005: 場所 0xcdcdce1d を読み込み中にアクセス違反が発生しました。
○○.exe の 0x00595b36 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xcdcdce1d を読み込み中にアクセス違反が発生しました。
というエラーメッセージが出てしまい、検索したところポインタによって参照してはいけないところを参照していると書かれていたものの、自分ではどこをどう直せばいいのか皆目検討も尽きません。
なにとぞ指南の方をよろしくお願いします。

ねんどじん
記事: 23
登録日時: 14年前

Re: [ハンドルされていない例外が発生しました]とエラーが出る

#2

投稿記事 by ねんどじん » 14年前

自分も初心者なのですごい見当違いなことを言ってるかもしれませんが・・・
CGameのstateに値は入っていますか?

Hid

Re: [ハンドルされていない例外が発生しました]とエラーが出る

#3

投稿記事 by Hid » 14年前

>>ねんどじん様
stateに初期値は代入されています。
実際にはコンストラクタによってstate、tに0が代入されています。
記入漏れ申し訳ありません。

アバター
a5ua
記事: 199
登録日時: 14年前

Re: [ハンドルされていない例外が発生しました]とエラーが出る

#4

投稿記事 by a5ua » 14年前

エラーを再現できるコード全体がないと、なんとも言えないですが、
推測だけで答えると、CBossのメンバgameの値が入っていないのではないでしょうか?

CBossがCGameのオブジェクトを参照するためには、少なくとも以下のようなコードが必要になると思われます。

コード:

class CGame{/* 略 */};

class CBoss {
  CGame *game;
public:
  void SetGame(CGame *g) { game = g; }
};

// どこかの関数
void func() {
  CGame game;
  CBoss boss;

  boss.SetGame(&game);
}
ここでは、SetGameというメンバ関数を用意しましたが、CBossのコンストラクタで設定しても良いでしょう。

Hid

Re: [ハンドルされていない例外が発生しました]とエラーが出る

#5

投稿記事 by Hid » 14年前

>>a5ua様
仰るとおりでした。
無事に解決しました。この度は本当にありがとうございました。

閉鎖

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