关于C++野指针的问题,晕了!

huangk 2008-07-29 04:57:08
如下:

#include "iostream.h"
#include "stdio.h"

class A
{
public:
void Func(void){ printf("Func of class A\n"); }
};

int main()
{
A *p = new A();
p->Func();

delete p;
p = NULL;//都等于NULL了,为什么下面一行还能正确???

p->Func();//这一句仍能正确执行,使我不能理解

return 1;
}

执行结果:
Func of class A
Func of class A
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
薛定谔之死猫 2008-07-29
  • 打赏
  • 举报
回复
;	        delete p;
;
push ebx
call @$bdele$qpv
pop ecx
;
; p = NULL;//都等于NULL了,为什么下面一行还能正确???
;
?live16385@64: ;
xor ebx,ebx
;
;
; p->Func();//这一句仍能正确执行,使我不能理解
;
?live16385@80: ; EBX = p
push ebx
call @@A@Func$qv
pop ecx
薛定谔之死猫 2008-07-29
  • 打赏
  • 举报
回复
C++实例成员函数的调用编译器会自动传this指针进去,而函数的地址是已经确定了的,并且在代码段,delete对象对代码没有影响,你的成员函数体内没有使用到this指针,其实这个时候是传了this=0进去的,用this->来访问数据和代码将带来问题,也就是综合2楼和3楼描述的
bargio_susie 2008-07-29
  • 打赏
  • 举报
回复
因为成员函数不在对象内存中。
baihacker 2008-07-29
  • 打赏
  • 举报
回复
后面的不要管...能出来什么结果并没有保证.

因为在Func里面并没有用到this,所以调用没有问题
((A*)0)->Func();也行
把函数改成下面的你看看this就明白了.
void Func(void)
{
printf("Func of class A\n");
printf("%p\n", this);
}
薛定谔之死猫 2008-07-29
  • 打赏
  • 举报
回复
内联函数?!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧