当我尝试访问应该在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是什么值,我总是得到错误。
请帮忙。非常感谢!
答案 0 :(得分:1)
假设调试器给出了正确的访问冲突位置,并让我们通过淘汰来继续:
DirtField
是固定的64x60阵列。因此DirtField
不能为nullptr,并且读访问错误不能来自DirtField
的分配。 x
和y
都在范围内,则读取访问错误不会来自对阵列的超出访问权限。DirtFiled[x][y]
包含一个指向Dirt
的指针,您可以将其与其他指针进行比较而不对它们进行任何反对。因此,它不会成为Dirt
类的问题,也不会是DirtField
数组的内容。 唯一的问题是,您称之为checkDirt()
的对象本身无效。类似的东西:
Class *myobject; // unitinialized pointer
myobject->checkDirt(21,14);