2010-12-11 7 views
0

にメンバ変数を設定しようとしたとき、私はこのようなクラスがあります。今、私はそれから継承別のクラスを持っているコード破りコンストラクタ

Player::Player(Board * someBoard) 
{ 
    board = someBoard; 
    side = '0'; 
} 

void Player::setSide(char newSide) 
{ 
    side = newSide; 
} 

class Player 
{ 
public: 
    Player(Board * someBoard); 

    void setSide(char newSide); 

protected: 
    Board * board; 
    char side; 
}; 

とその実装をなどされています。

class HumanPlayer : public Player 
{ 
public: 
    HumanPlayer(Board * someBoard); 
}; 

そしてその短い実装はこれです:

HumanPlayer::HumanPlayer(Board * someBoard) : Player(someBoard) 
{ 
} 

ここで問題は、side = '0';行でプログラムがフリーズする(Windows 7ではウィンドウが白くなり、凍っているかクラッシュしているかはわかりません)。それをコメントアウトすると、プログラムはうまく動くようになります(変数はまだどこにも使われていないのでコメントアウトしても大丈夫です)。

エラーの原因とは何ですか?どのように修正できますか?

EDIT!

fstreamにいくつかのものを印刷した後、突然すべてのプログラムが機能しました。私は印刷をコメントアウトしようとしました。それはまだ働いた。私は追加したデバッグコードを削除しようとしました。それはまだ機能しています。だから私のコードは上記のものとまったく同じですが、今は魔法のように動作します。

ここで私は何をしますか?異常を無視しますか?それはコンパイラの間違いでしたか?

+12

'char'変数の代入はプログラムをフリーズしません。何か他のものが間違っています。恐らくメッセージループやウィンドウプロシージャのどこかで(おそらくそれを投稿できます)。しかし、問題はおそらくあなたの質問のコードにあることはできません。 –

+1

合意 - デバッガをブレークアウトする時間。 – razlebe

+0

@ insilicoああ私はheisenbugsを嫌いですか?しかし、私はどのようにメッセージループを得るのですか?私はGUIプログラミングの初心者です – wrongusername

答えて

1

それはあなたがで定義されたプレイヤーのクラスの互換性のない2つの定義を、使用していることは可能です別のヘッダファイル?定義のサイズが異なる場合、 'size'メンバはクラスインスタンスに割り当てられたメモリブロックの外側にある可能性があります。

あなたの問題は消えています。だからおそらくクラス定義の変更後に再コンパイルされなかったモジュールだったでしょう。今はすべてを再コンパイルしたので、問題は解決しました。

+0

いいえ、1つの定義を持つプレーヤークラスは1つだけです。 – wrongusername

2

私はこの問題があなたの考えではないと思っています。

メモリの破損のようなものですが、提供された情報に基づいて判断するのは本当に不可能です。

  1. いずれかの問題を示し、最小完全プログラムを投稿、または
  2. が、それはあなたが何が起こっているかを把握するのに役立ちますかどうかを確認するためにvalgrind-type toolを試してみてください:私はあなたのための2つの提案を持っています。いっそ

あるいは、(それがハングいたら。)、デバッガでプログラムの状態を見て、起動

関連する問題