访问二维数组时读取冲突
Read Violation when Accessing 2D array
当我尝试访问本应位于二维数组内的地址时,我遇到了一个非常奇怪的读取冲突错误。
请阅读我的几行代码:
Class class : public SuperClass
{
public:
bool checkDirt(int x, int y)
{
if(DirtField[x][y] != nullptr) //read violation error given here
................
private:
Dirt* DirtField[64][60];
}
DirtField 二维数组由指向 Dirt 对象的指针和空指针组成
当我尝试调试程序时,它告诉我 x 和 y 总是在二维数组的边界内,比如 x=21,y=14。但无论 x 和 y 是什么值,我总是会得到错误。
请帮忙。非常感谢!
让我们假设调试器给出了访问冲突的正确位置,让我们继续消除:
DirtField
是一个固定的 64x60 数组。所以 DirtField
不能是 nullptr,读取访问错误不能来自 DirtField
的分配。
- 如果您已检查
x
和 y
都在范围内,则读取访问错误也不能来自对数组的越界访问。
DirtFiled[x][y]
包含一个指向 Dirt
的指针,您可以在不取消引用任何一个的情况下与另一个指针进行比较。因此,Dirt
class 或 DirtField
数组的内容都不是问题。
剩下的唯一问题是您调用 checkDirt()
的对象本身无效。类似于:
Class *myobject; // unitinialized pointer
myobject->checkDirt(21,14);
当我尝试访问本应位于二维数组内的地址时,我遇到了一个非常奇怪的读取冲突错误。 请阅读我的几行代码:
Class class : public SuperClass
{
public:
bool checkDirt(int x, int y)
{
if(DirtField[x][y] != nullptr) //read violation error given here
................
private:
Dirt* DirtField[64][60];
}
DirtField 二维数组由指向 Dirt 对象的指针和空指针组成
当我尝试调试程序时,它告诉我 x 和 y 总是在二维数组的边界内,比如 x=21,y=14。但无论 x 和 y 是什么值,我总是会得到错误。
请帮忙。非常感谢!
让我们假设调试器给出了访问冲突的正确位置,让我们继续消除:
DirtField
是一个固定的 64x60 数组。所以DirtField
不能是 nullptr,读取访问错误不能来自DirtField
的分配。- 如果您已检查
x
和y
都在范围内,则读取访问错误也不能来自对数组的越界访问。 DirtFiled[x][y]
包含一个指向Dirt
的指针,您可以在不取消引用任何一个的情况下与另一个指针进行比较。因此,Dirt
class 或DirtField
数组的内容都不是问题。
剩下的唯一问题是您调用 checkDirt()
的对象本身无效。类似于:
Class *myobject; // unitinialized pointer
myobject->checkDirt(21,14);