未处理的异常

时间:2011-12-19 08:05:11

标签: c++ exception mfc

我尝试实施http://www.cprogramming.com/tutorial/game_programming/same_game_part1_p2.html中描述的游戏。虽然它最初运行良好,但从某些时候到现在在运行时崩溃,而构建并不表示有任何错误。该问题显示为“未处理的例外” - 行上的“访问违规读取位置”

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

中的函数

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]];
}

任何可能的原因?

更新

程序第一次尝试访问时崩溃

m_arrColors[m_arrBoard[0][0]];

m_arrColors和m_arrBoard由构造函数定义:

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);
}

Update2:我添加了命令SetupBoard();在构造函数的主体中,它工作。然而,教程http://www.cprogramming.com/tutorial/game_programming/same_game_part1_p2.html没有提出它,并且最初在没有它的情况下在我的程序中工作正常。

1 个答案:

答案 0 :(得分:1)

显而易见的原因是您正在访问数组的无效索引 - m_arrColorsm_arrBoard

例如,如果m_arrBoard的维度为3x3,并且您尝试访问m_arrBoard[3][3],则会发生崩溃(可能是实际上未定义的行为)。 - 请记住,C ++数组 0

使用调试器运行它,并检查是否发生这种情况。