野指针问题

Dong 2003-09-15 12:45:10
#include <iostream.h>
class Base
{
public:
Base(void){cout<<"create"<<endl;}
~Base(void){cout<<"destroy"<<endl;}
void func(int i){cout<<"i="<<i<<endl;}
};
void func1(void)
{
Base *pb=NULL;
{
Base b;
pb=&b;//注意b的生命周期
}
pb->func(1);//pb已经成为野指针
}
int main(int argc, char* argv[])
{
func1();
return 0;
}

//结果的输出为:
create
destroy
i=1//这里的输出是不可能的,因为b对象已经被析构了,但却能正确输出,为什么?
...全文
49 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DaNiao 2003-09-15
  • 打赏
  • 举报
回复
这很正常压
你还可以这样:
Base *p = (Base *)0x12345;
p->func(1);
它照样能转

C++不永远不会去检查一个对象是否有效,或者数组是否越界这样的问题
Dong 2003-09-15
  • 打赏
  • 举报
回复
谢谢一,二楼的。结帖
Dong 2003-09-15
  • 打赏
  • 举报
回复
谢谢楼上!!
我有另一疑问请教,pb->func(1);应该是无效的内存地址啊,应该输出的是乱码但为什么能正确输出呢!
tjymz 2003-09-15
  • 打赏
  • 举报
回复
因为p->func(1)的调用并不需要生成实例~~
所以无论p是否有意义~都是可以调的啊~~

64,652

社区成员

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

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