访问 2D 数组时的读取冲突

Read Violation when Accessing 2D array

本文关键字:读取 冲突 2D 数组 访问      更新时间:2023-10-16

当我尝试访问应该在 2D 数组内的地址时,我遇到了一个非常奇怪的读取冲突错误。请阅读我的几行代码:

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 2D 数组由指向 Dirt 对象的指针和 nullptrs 组成

当我尝试调试程序时,它告诉我 x 和 y 在 2D 数组的边界中总是很好,比如 x=21、y=14。但是无论x和y的值是什么,我总是得到错误。

请帮忙。多谢!

假设调试器给出了访问冲突的正确位置,让我们继续消除:

  • DirtField是一个固定的 64x60 阵列。所以DirtField不能是 nullptr,读取访问错误不能来自DirtField的分配。
  • 如果已检查xy都在范围内,则读取访问错误也不能来自对阵列的越界访问。
  • DirtFiled[x][y]包含一个指向Dirt的指针,您可以将其与其他指针进行比较,而不会取消对其中任何一个的引用。 因此,Dirt类或DirtField数组的内容也不是问题。

剩下的唯一问题是,您调用checkDirt()的对象本身无效。 像这样:

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