我收到了一个错误:
First-chance exception at 0x0021F4F2 in Tetris.exe: 0xC0000005: Access violation reading location 0x000000D8.
Unhandled exception at 0x0021F4F2 in Tetris.exe: 0xC000041D: An unhandled exception was encountered during a user callback.
这是我的ColorGrid.cpp文件,当我在函数名const COLORREF ColorGrid::Index(int iRow, int iCol)
&运行应用程序时发生错误行返回m_buffer[iRow * COLS + iCol];
#include "StdAfx.h"
#include "ColorGrid.h"
#include <exception>
ColorGrid::ColorGrid()
{
}
COLORREF& ColorGrid::Index(int iRow, int iCol)
{
bool flag = false;
if ((iRow >= 0) && (iRow < ROWS) && (iCol >= 0) && (iCol < COLS))
{
flag = true;
}
if (!flag)
{
TRACE("iRow:", iRow, " iCol:", iCol);
}
return m_buffer[iRow + COLS + iCol];
}
const COLORREF ColorGrid::Index(int iRow, int iCol) const
{
try
{
bool flag = false;
if ((iRow >= 0) && (iRow < ROWS) && (iCol >= 0) && (iCol < COLS))
{
flag = true;
}
if (!flag)
{
TRACE("iRow:", iRow, " iCol:", iCol);
}
return m_buffer[iRow * COLS + iCol];
}
catch (CException* e)
{
TCHAR szCause[255];
CString strFormatted;
e->GetErrorMessage(szCause, 255);
TRACE("exception GetErrorMessage:", szCause);
TRACE("iRow:", iRow, " iCol:", iCol, "COLS:", COLS);
e->Delete();
}
}
相关头文件ColorGrid.h:
#ifndef COLOR_GRID_H
#define COLOR_GRID_H
const int ROWS = 20;
const int COLS = 10;
class ColorGrid
{
public:
ColorGrid();
void Clear();
COLORREF& Index(int iRow, int iCol);
const COLORREF Index(int iRow, int iCol) const;
void Serialize(CArchive& archive);
private:
COLORREF m_buffer[ROWS * COLS];
};
#endif
这是因为我在标题&amp;中预先分配/初始化了m_buffer[ROWS * COLS]
后来我想return m_buffer[iRow * COLS + iCol];
返回不同的尺寸?
由于
答案 0 :(得分:1)
线索在错误消息Access violation reading location 0x000000D8
中,您的代码正在尝试访问一个非常低的地址,此地址不适用于普通程序。这将是尝试使用空指针引起的。鉴于从null的偏移非常大,我假设m_buffer为null。
答案 1 :(得分:1)
&#39; iRow&#39;的价值是什么?和&#39; iCol&#39;当访问违规例外时。
如果iRow * COLS + iCol&#39;的总和大于199然后它应该抛出访问冲突。
有人认为我不明白你为什么要回来&#34; return m_buffer [iRow * COLS + iCol]&#34;总是在那个功能。当标志为真时,最好返回。
感谢。