class Register
{
private:
DWORD ax,dx,cx,bx; // POH
DWORD bp,sp;
DWORD flag, ip;
public:
//====================================================
Register()
{
ax = 0x0;
dx = 0x0;
cx = 0x0;
bx = 0x0;
bp = 0x0;
memset(&this->sp,0,sizeof(sp));
sp = 0x0;
flag = 0x0;
ip = 0x0;
}
//====================================================
~Register()
{
}
//====================================================
void setAx(DWORD d)
{
ax=d;
}
//====================================================
void setDx(DWORD d)
{
dx=d;
}
//====================================================
void setCx(DWORD d)
{
cx=d;
}
//====================================================
void setBx(DWORD d)
{
bx=d;
}
//====================================================
void setBp(DWORD d)
{
bp=d;
}
//====================================================
void incSp()
{
sp = sp+1;
}
void decSp()
{
if(sp == 0)
{
sp = 0;
}
sp = sp - 1;
}
//====================================================
void setFlag(DWORD d)
{
flag=d;
}
//====================================================
void setIp(DWORD d)
{
ip=d;
}
//====================================================
DWORD getAx()
{
return ax;
}
//====================================================
DWORD getDx()
{
return dx;
}
//====================================================
DWORD getCx()
{
return cx;
}
//====================================================
DWORD getBx()
{
return bx;
}
//====================================================
DWORD getBp()
{
return bp;
}
//====================================================
DWORD getSp()
{
return this->sp;
}
//====================================================
DWORD getFlag()
{
return flag;
}
//====================================================
DWORD getIp()
{
return ip;
}
//====================================================
};
为什么我使用getSp();功能如下:
PReg->getSp();
它给了我一个AV错误,我在我初始化它的位置跟踪这个变量给了我一个零的随机数,我设置为和问题函数点sp变量是“???? “ ?
Register *PReg;
- PReg:)
答案 0 :(得分:0)
这就是为什么(根据你发布的内容,我可以告诉你)
Register *PReg;
PReg
无效。当然,你声明它,但你从来没有初始化它,所以它的值是不确定的,解除引用它会导致未定义的行为。您需要new
或使用来自其他位置的有效指针对其进行初始化。简单地声明它不会分配内存并初始化指针。对于没有静态存储空间的任何变量也是如此,但即使它是静态的,指针仍然无效,除非它在被解除引用之前在某处初始化。
Register *PReg = new Register();
// use it...
delete PReg;
老实说,除非你知道自己在做什么,否则你不应该用C ++这样设计你的代码。看看RAII。至于你的例子,我认为没有理由不使用自动存储。
void Foo() {
Register reg;
// use reg
} // reg goes out of scope, memory reclaimed
此外,我不知道您为何使用memset
初始化sp
。
答案 1 :(得分:0)
代码编译并正确运行,因此很可能是您实例化PReg变量的方式。我已经完成了两种方式,第一种是我假设你正在这样做的方式:
Register *PReg = new Register;
cout << PReg->getSp() << endl;
还要宣布:
Register PReg;
cout << PReg.getSp() << endl;
两者都按预期打印“0”。如果您可以发布如何创建PReg实例,那将会有所帮助。