C++ 使用对象指针时的访问冲突读取
在开始时,我的程序创建了一个结构和一个类,其中包含一个struct和两个int变量C++ 使用对象指针时的访问冲突读取,c++,arrays,object,pointers,struct,C++,Arrays,Object,Pointers,Struct,在开始时,我的程序创建了一个结构和一个类,其中包含一个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; } 之后,在主要部分中,我
#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
的每个元素;如果所选元素尚未为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;
}
}
}
对于(j=0;j此循环:
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];
}
甚至更好
for (i=0; i<(sizeof(Objects)/sizeof(Objects[0])); i++)
对于(i=0;i您只是存在访问冲突。您应该调试代码,方法是单步执行并单步执行,以找出访问冲突的来源。访问冲突表示您试图引用空引用。请确保在访问对象之前为其分配内存
您有一个for循环,该循环将DetectorField[i][j]=NULL,这意味着位置[i][j]是一个NULL引用。然后您有一个DetectorField[Objects[i].X_Pos][Objects[i].Y_Pos]引用。您可能会遇到一些访问冲突。省省点麻烦,替换“char*name”使用std::string
在tiles
中使用std::string
。i
和j
的值是什么?感谢您的提示;但是,遗憾的是,如果我使用std::string
,我会出现堆栈溢出。无论如何:即使我更改fullheight
和fullwidth
1,它也会崩溃。如果它使用ful崩溃,那就很奇怪了lheight=fullwidth=1,因为循环不会执行任何操作。哦,等等-忘了这一点!但是数组从0开始计数,不是吗?所以在初始化[10]的情况下,它从[0]计数到[9]-或者不从[9]-当i小于9时运行循环…通过对象[8]初始化对象[0]
。如果使用i<10
或i,则从不初始化对象[9]
for (i=0; i<10; i++)
for (i=0; i<(sizeof(Objects)/sizeof(Objects[0])); i++)