2011-12-19 19 views
0

私はhttp://www.cprogramming.com/tutorial/game_programming/same_game_part1_p2.htmlで説明されているゲームを実装しようとします。最初はうまくいきましたが、現時点までのいくつかの点からは実行時にクラッシュしますが、ビルドはエラーを示していません。機能処理されない例外

COLORREF CSameGameBoard::GetBoardSpace(int row, int col) 
{ 
    // Check the bounds of the array 
if(row < 0 || row >= m_nRows || col < 0 || col >= m_nColumns) 
    return m_arrColors[0]; 
return m_arrColors[m_arrBoard[row][col]]; 
} 

どれ可能な理由でライン

return m_arrColors[m_arrBoard[row][col]]; 

の「アクセス違反が場所を読んで」 - 問題は、「未処理の例外」として表示されますか?

更新:

CSameGameBoard::CSameGameBoard(void) 
    :m_arrBoard(NULL), 
    m_nColumns(15), m_nRows(15), 
    m_nHeight(35), m_nWidth(35) 
{ 
    m_arrColors[0] = RGB( 0, 0, 0); 
    m_arrColors[1] = RGB(255, 0, 0); 
    m_arrColors[2] = RGB(255,255, 64); 
    m_arrColors[3] = RGB( 0, 0,255); 
} 

アップデート2:私は追加

プログラムが

m_arrColors[m_arrBoard[0][0]]; 

m_arrColorsとm_arrBoardにアクセスしようとする初めてのコンストラクタで定義されていますがクラッシュしましたコマンドSetupBoard();コンストラクターのボディ内で動作し、それが機能しました。しかし、それはチュートリアルhttp://www.cprogramming.com/tutorial/game_programming/same_game_part1_p2.htmlによって提案されておらず、最初は私のプログラムでうまく動作しませんでした。

+1

'm_arrColors'と' m_arrBoard'とは何ですか?クラッシュが発生したときに 'row'と' col'とは何ですか?あなたはただ外出しているだけです。 – tenfour

+0

'm_arrBoard [row] [col]'が有効であることを確認しましたか?あなたはデバッガでそれを実行しようとしましたか? –

答えて

1

明らかな理由は、配列の無効なインデックス(m_arrColorsまたはm_arrBoard)にアクセスしていることです。

たとえば、m_arrBoardのサイズが3x3で、m_arrBoard[3][3]にアクセスしようとすると、クラッシュする可能性があります(おそらく実際には未定義の動作です)。 - C++配列は0ベースのであることに注意してください。

これをデバッガで実行し、これが起こっているかどうかを確認します。

関連する問題