2011-12-19 4 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- 기반이라는 것을 기억하십시오.

디버거를 사용하여 실행하고 이것이 발생하는지 확인하십시오.