未处理的异常
Posted
技术标签:
【中文标题】未处理的异常【英文标题】:Unhandled exception 【发布时间】:2011-12-19 08:05:11 【问题描述】:我尝试实现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 并没有提出它,并且在没有它的情况下最初在我的程序中也可以正常工作。
【问题讨论】:
m_arrColors
和 m_arrBoard
是什么?当崩溃发生时,row
和 col
是什么?很确定你只是越界了。
您是否检查过m_arrBoard[row][col]
是否有效?你试过在调试器中运行它吗?
【参考方案1】:
明显的原因是您正在访问无效的数组索引 - m_arrColors
或 m_arrBoard
。
例如,如果m_arrBoard
的维度为3x3
,并且您尝试访问m_arrBoard[3][3]
,则会发生崩溃(可能实际上是未定义的行为)。 - 请记住,C++ 数组是基于 0 的。
使用调试器运行它,并检查是否发生这种情况。
【讨论】:
以上是关于未处理的异常的主要内容,如果未能解决你的问题,请参考以下文章
SQL 异常未处理 - System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常