gpt4 book ai didi

c++ - 0xC0000005 : Access violation reading location of an Integer?

转载 作者:太空狗 更新时间:2023-10-29 23:31:19 28 4
gpt4 key购买 nike

似乎通常人们在使用指针、数组、结构等时会收到这些错误。我在类中的每个整数上都遇到了这些错误,这让我很困惑。我确定我只是遗漏了一些小的技术细节(我对此有点陌生)。

准确的错误是:

First-chance exception at 0x003e6616 in Mine.exe: 0xC0000005:
Access violation reading location 0x00000008.
Unhandled exception at 0x003e6616 in Mine.exe: 0xC0000005:
Access violation reading location 0x00000008.

代码在此类方法的第一行中断:

void Grid::Move(int x, int y)
{
this->offX+=x;
this->offY+=y;
for (int i=0;i<2;i++)
for (int k=0;k<2;k++)
BitmapSetxy(chunks[i][k]->map,this->offX,this->offY);
}

Grid 的构造函数如下:

Grid::Grid()
{
totalW =320*2;
totalH = 320*2;
offX = 0;
offY = 0;

//Fill the chunks array with Maps to be used
for (int i=0;i<2;i++)
for (int k=0;k<2;k++)
chunks[i][k] = new Map(i*320,k*320);

//Everything starts as dirt
for (int x=0;x<(320*2)/20;x++)
for (int y=0;y<(320*2)/20;y++)
blocks[x][y] = bType::Dirt;
}

和头文件:

#ifndef MapDef
#define MapDef

#include "Map.h"

class Grid
{
private:
int totalW, totalH;
int offX, offY;
public:
enum bType
{
Blank,
Dirt,
Copper
};

Map * chunks[2][2];
bType blocks[32][48];
void RemoveBlock(int x, int y);
bType GetBlockAt(int x, int y);
int GetAbsolutePosition20(int);
int GetMapIndex(int);
int GetChunkRelative(int,int);
bType GetBlockBelow(int x, int y);
bType GetBlockAbove(int x, int y);
bType GetBlockSide(int x, int y, bool isRight);
void Move(int x, int y);
Grid();
};

#endif

查看Grid当前实例totalW、totalH、offX、offY的locals View 时均显示CXX0030错误,但两个数组完全没问题。这到底是怎么回事?

编辑:

网格指针的定义存储在一个单独的小命名空间中,作为一个静态类:

namespace Engine
{
static Grid * grid;
static Player * player;
}

它实际上是在主cpp文件中创建的:

//Initialize engine
Engine::grid = new Grid();
Engine::player = new Player(160,240);

这是调用它的摘录,在另一个名为 Player 的类中

    if (y>392 && y<480 && x>75 && x<152)
{
printf("Right");
Engine::grid->Move(20,0);
}

编辑 2:

对不起,我忘了从引擎中的网格声明中删除“static”关键字。我相信这就是导致问题的原因。

最佳答案

根据错误消息,您的代码正在尝试访问地址 0x00000008,该地址非常接近 0。这意味着您可能在某处有一个类型为 Grid * 的空指针,并且您正在调用一个对它起作用。

您应该确保指针不为空,或者检查它。例如:

Grid * grid = ...;
if (grid == NULL){ return; }
grid->move(0,1);

请注意,NULL 与 0 相同。

关于c++ - 0xC0000005 : Access violation reading location of an Integer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6163139/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com