一个关于野指针的问题
class A
{
public:
int x;
A(int e)
{
x=e;
}
void Func(void)
{
cout << "Func of class A"<<endl;
}
~A();
};
A::~A(){cout<<"qqqqqqqqqq"<<endl;}
void test6()
{
A *p;
p=NULL;
{
A a(10);
p = &a; // 注意 a 的生命期
//delete p;
}
// p是“野指针”
cout<<p->x<<endl;
}
void main()
{
test6();
}
汇编码
: A *p;
p=NULL;
004171D4 and dword ptr [p],0
{
A a(10);
004171D8 push 0Ah
004171DA lea ecx,[a]
004171DD call A::A (4110A5h)
p = &a; // 注意 a 的生命期
004171E2 lea eax,[a]
004171E5 mov dword ptr [p],eax
//delete p;
}
004171E8 lea ecx,[a]
004171EB call A::~A (4114C9h)
// p是“野指针”
cout<<p->x<<endl;
004171F0 push offset endl (411203h)
004171F5 mov eax,dword ptr [p]
004171F8 push dword ptr [eax]
004171FA mov ecx,offset cout (4328E4h)
004171FF call ostream::operator<< (411046h)
00417204 mov ecx,eax
00417206 call ostream::operator<< (411028h)
问题:是不是对象申请的内存是固定的 对象消失了那个地址也不消失啊 这个上面 对象a的地址是0x0012FDF4, p指向a后 a消亡 p还是指的那个地方
但是那个地方里面居然还有数据.我好像记得说是
对象1的数据
对象2的数据
对象3的数据
对象4的数据
对象的方法
的内存分配是这样的 所以原例子中用的调用函数 我改了下试着显示对象a的数据成员 结果还是一样的结果
qqqqqqqqqq
10
Press any key to continue
实在是崩溃 不知道怎么回事 希望大家赐教啊!!!1