访问二维数组时读取冲突

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 的分配。
  • 如果您已检查 xy 都在范围内,则读取访问错误也不能来自对数组的越界访问。
  • DirtFiled[x][y] 包含一个指向 Dirt 的指针,您可以在不取消引用任何一个的情况下与另一个指针进行比较。因此,Dirt class 或 DirtField 数组的内容都不是问题。

剩下的唯一问题是您调用 checkDirt() 的对象本身无效。类似于:

Class *myobject;  // unitinialized pointer 
myobject->checkDirt(21,14);