c++ - 使用对象指针时访问冲突读取

标签 c++ arrays object pointers struct

一开始,我的程序创建了一个结构体和一个包含一个结构体和两个 int 变量的类。

#define fullwidth 200
#define fullheight 200

typedef struct tiles
{
    unsigned char red, green, blue;
    char* name;
}tiles;

class Units
{
public:

int X_Pos;
int Y_Pos;

tiles MapColour;

}

之后,在主体部分,我创建了一个二维数组以使用 tiles 作为显示的 RGB 容器,以及一个对象指针数组来跟踪已声明对象的任何变化。

int i, j;

tiles fieldd[fullwidth][fullheight];

Units* DetectorField[fullwidth][fullheight];

Units Objects[10];

之后(现在在 main() 中),我上传了两个具有有效值的数组,避免了相关问题。

for (j=0;j<fullheight;j++)
{
    for (i=0;i<fullwidth;i++)
    {
        fieldd[i][j] = BASE;
        DetectorField[i][j] = NULL;
    }
}

与对象相同 + 为指针添加对象内存地址,以便能够通过 DetectorField 识别它们:

for (i=0; i<9;i++)
{
Objects[i].X_Pos = i+2;    //just some values, not important yet
Objects[i].Y_Pos = 2*i+2;
DetectorField[Objects[i].X_Pos][Objects[i].Y_Pos] = &Objects[i];
}

当然,这还可以。但是现在问题来了!在下一段代码中,我检查了 DetectorField 的每个元素;如果所选元素还不是 NULL(这显然意味着它只能是对象的内存地址,因为它无法获得任何其他值 - 如果我知道的话),然后将 MapColour变量到结构数组。

for (j=0;j<fullheight;j++)
{
    for (i=0;i<fullwidth;i++)
    {
        if(DetectorField[i][j] != NULL)
        {
            fieldd[i][j] = DetectorField[i][j]->MapColour;
        }
    }
}

此时,当我尝试运行 MSVC 时出现此错误消息:Fallen Star.exe 中 0x00411ed7 处未处理的异常:0xC0000005:访问冲突读取位置 0xccccccdc。

我做错了什么?条件内的操作对我来说似乎还可以。问题可能是我使用 fieldd 的方式吗?

最佳答案

您只是遇到了访问冲突。您应该调试您的代码,通过单步执行和单步执行来找出访问冲突的来源。访问冲突表示,您正在尝试引用 NULL 引用。确保在访问对象之前为对象分配内存。

您有一个 for 循环分配 DetectorField[i][j] = NULL,这意味着位置 [i][j] 是一个 NULL 引用。然后你有一个引用 DetectorField[Objects[i].X_Pos][Objects[i].Y_Pos]。您可能在那里遇到了一些访问冲突。

关于c++ - 使用对象指针时访问冲突读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764313/

相关文章:

python - 从 Python Embedded in C++ 使用 sys 时出错

java - Java 中的最小/最大 lambda 表达式

php - php数组的结果是[value][value],我怎样才能得到像[value,value]这样的结果

javascript - 设置显示后Flash对象方法不可用 :none

c++ - 是否可以在 C++ 中使用 openmp 进行乘法初始化?

c++ - 为什么这个文件读取代码会产生异常?

c++ - 遍历数组最有效的方法是什么? (c++)

javascript - 按字母顺序然后数字顺序对对象值数组进行排序

c++ - 如何构造对象数组? C++

javascript - 在LiveCycle中,对象名称以#开头是什么意思?