未处理的异常

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_arrColorsm_arrBoard 是什么?当崩溃发生时,rowcol 是什么?很确定你只是越界了。 您是否检查过m_arrBoard[row][col] 是否有效?你试过在调试器中运行它吗? 【参考方案1】:

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

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

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

【讨论】:

以上是关于未处理的异常的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch未分配分片异常处理

SQL 异常未处理 - System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

如何生成未处理的 MFC 异常?

我可以禁用进程的未处理异常处理程序吗?

WPF捕获全局未处理异常

第25章 SEH结构化异常处理_未处理异常及向量化异常