访问2D阵列时读取违规

时间:2016-02-20 23:53:33

标签: c++ arrays pointers access-violation

当我尝试访问应该在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是什么值,我总是得到错误。

请帮忙。非常感谢!

1 个答案:

答案 0 :(得分:1)

假设调试器给出了正确的访问冲突位置,并让我们通过淘汰来继续:

  • DirtField是固定的64x60阵列。因此DirtField不能为nullptr,并且读访问错误不能来自DirtField的分配。
  • 如果您检查xy都在范围内,则读取访问错误不会来自对阵列的超出访问权限。
  • DirtFiled[x][y]包含一个指向Dirt的指针,您可以将其与其他指针进行比较而不对它们进行任何反对。因此,它不会成为Dirt类的问题,也不会是DirtField数组的内容。

唯一的问题是,您称之为checkDirt()的对象本身无效。类似的东西:

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