C++,编译器用的是visual studio2017,定义了一个类,在类中用this为另一个结构体的中的类指针赋值,之后一直提示
引发了异常: 读取访问权限冲突。
this 是 0xCEADC615。
源代码在这:
#include<Windows.h>
#include<cstdio>
#include<graphics.h>
#include<math.h>
struct chess;
class piece
{
public:
int x;
int y;
chess*locat = NULL;
int d;
int ty;
char name[6] = { 'R','K','B','Q','L','P' };
void gets(int a, int b);
void print();
void move();
};
struct chess
{
int x;
int y;
int d = 0;
chess *next = NULL;
piece *pen = NULL;
};
chess cb[8][8];
void piece::gets(int a, int b)
{
if (locat != NULL)
{
locat->pen = NULL;
locat->d = 0;
}
if (cb[a][b].pen != NULL)
{
cb[a][b].pen->locat = NULL;
}
x = a;
y = b;
locat = &cb[a][b];
cb[a][b].d = d;
cb[a][b].pen = this;
}
void piece::print()
{
outtextxy(40 * x + 20, 40 * y + 20, name[ty-1]);//在此处报错
}
int main()
{
initgraph(320, 320);
int i, j, f, g;
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
{
cb[i][j].x = i;
cb[i][j].y = j;
if (j < 2)
cb[i][j].d = 1;
if (j > 5)
cb[i][j].d = 2;
}
piece pan[32];//0-3rook 4-7Knight 8-11bishop 12-13Queen 14-15King 16-31Pawn
pan[0].gets(0, 0), pan[1].gets(7, 0), pan[2].gets(0, 7), pan[3].gets(7, 7);//rook
pan[4].gets(1, 0), pan[5].gets(6, 0), pan[6].gets(1, 7), pan[7].gets(6, 7);//knight
pan[8].gets(2, 0), pan[9].gets(5, 0), pan[10].gets(2, 7), pan[11].gets(5, 7);//bishop
pan[12].gets(3, 0), pan[13].gets(4, 7);//queen
pan[14].gets(3, 7), pan[15].gets(4, 0);//king
for (i = 0; i < 8; i++)
{
pan[i + 16].gets(i, 1);//wpawn
pan[i + 24].gets(i, 6);//bpawn
}
for (i = 0; i < 32; i++)
{
pan[i].d = pan[i].locat->d;
}
while (1)
{
for (i = 0; i < 8; i++)
{
line((i + 1) * 40, 0, (i + 1) * 40, 320);
line(0, (i + 1) * 40, 320, (i + 1) * 40);
}
for (i = 0; i < 32; i++)
pan[i].print();
MOUSEMSG msg;
for (;;)
{
msg = GetMouseMsg();
if (msg.mkLButton)
{
f = msg.x;
g = msg.y;
break;
}
}
f = (f - f % 40) / 40;
g = (g - g % 40) / 40;
if (cb[f][g].pen != NULL)
cb[f][g].pen->move();
}
}
move()太长就不复制了
outtextxy 这个函数确实不存在啊
是 graphic.h 里定义的么?你是用的 easyx 么
【以下回答由 GPT 生成】
问题是在定义类piece
中使用this
关键字将另一个结构体chess
中的类指针赋值时出现了"读取访问权限冲突"的异常。根据提供的代码,我无法确定异常具体出现在哪里,因为缺少了主函数和一些必要的代码。但是我可以给出一般的解决方案和一些可能导致异常的原因。
首先,读取访问权限冲突的异常通常是因为访问的内存地址没有正确的权限。这可能是因为以下几个原因导致的:
访问了空指针:可能在使用this
关键字来访问chess
结构体中的类指针时,出现了空指针。这可能是因为没有正确初始化或者设置pen
指针。在使用this
关键字前,请确保pen
指针不为空。
访问已释放的内存:可能在使用this
关键字之前,pen
指针所指向的内存已被释放。请确保在使用this
关键字之前,pen
指针所指向的内存是有效的。
访问越界的内存:可能在使用this
关键字时,访问了越界的内存。请检查数组的边界和索引范围,确保访问的内存是有效的。
另外,在你提供的代码中,我注意到你包含了一些头文件(<Windows.h>
, <cstdio>
, <graphics.h>
, <math.h>
),但是没有看到相关的使用。请确保这些头文件的使用是正确的,并且在编译时链接了必要的库文件。
最后,作为推荐,你可以尝试在代码中添加一些调试语句,比如打印一些变量的值,以便定位到具体的异常出现的地方。可以使用printf
函数来输出一些调试信息。
如果你能提供更多的代码和错误信息,我可能能够给出更具体的帮助。请确保提供完整的代码和错误信息,并在问题中指出哪一行出现了异常。
【相关推荐】