一个关于野指针的问题

prophetluo prophetluo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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
...全文
评论 6
收藏 已收藏
分享
返回顶部
prophetluo
C++ 语言 65,214 成员 250,514 内容