下面这个程序怎么不报错??

pop1210 2009-03-25 07:17:41
class A
{
public:
void Func(void){ cout << "Func of class A" << endl; }
};

int _tmain(int argc, _TCHAR* argv[])
{
A *p;
{
A a;
p = &a;//
}
p->Func();//现在,a已经不存在了

return 0;
}
...全文
156 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pop1210 2009-05-02
  • 打赏
  • 举报
回复
回头看这个问题,觉得没什么意义,好像liqinghua1653 可能算是答案了吧,结贴了.
pop1210 2009-03-26
  • 打赏
  • 举报
回复
for 10000次运行时也没有错误,不知道有没有好的解释??
pop1210 2009-03-26
  • 打赏
  • 举报
回复
不对啊,我用的是vs2008,报运行时错误,意思是指针没有初始化就被使用了~
不知道您用的是哪个?
chun799 2009-03-25
  • 打赏
  • 举报
回复

#include<iostream>

using namespace std;

class A
{
public:
void Func(void){ cout << "Func of class A" << endl; }
};

int main()
{
A *p;
{
// A a;
// p = &a;//
}
p->Func();//现在,a已经不存在了

return 0;
}


这样也对,那应该和a存不存在没多大关系了吧!!
silverice 2009-03-25
  • 打赏
  • 举报
回复
编译不报错,运行时会有错误吧,多半是内存访问错误
nuoshueihe 2009-03-25
  • 打赏
  • 举报
回复
不能返回局部变量的指针
pop1210 2009-03-25
  • 打赏
  • 举报
回复
用断点跟踪的时候,p的值已经改变了啊~!为什么还能调用Func()??
liqinghua1653 2009-03-25
  • 打赏
  • 举报
回复
a 是分配在栈上面的,尽管a已经被析构了,但是在p->Func()调用的时候a的内容还没有被销毁掉或者被其他数据覆盖。这种行为一般是一个没有定义的行为, 不代表一定明显的报错。

65,211

社区成员

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

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