首页 新闻 会员 周边

C++ 关于野指针和作用域的问题

0
悬赏园豆:30 [已关闭问题] 关闭于 2011-08-17 22:24

1 #include <iostream>
2 using namespace std;
3 class A{
4 public:
5 void func(){cout << "A func()" << endl;}
6 };
7 void test(){
8 A *p;
9 {
10 A a;
11 p = &a;
12 }
13 p->func();
14 }
15 int main()
16 {
17 test();
18 return 0;
19 }
    上面代码中,12行当p离开作用域时,不是应该p编程野指针么,为什么test函数输出依然正确?有人说是编译器优化了???

wtx的主页 wtx | 初学一级 | 园豆:160
提问于:2011-08-15 21:05
< >
分享
所有回答(3)
0

我看这段代码问题:1.你说那是不是野指针,是,但是并不是所有的野指针都会引发错误(因为没有引发内存冲突问题)。2.A *p;  建议用new的方法;3.第9行和第12行的{}有用么?

 

静幽独白 | 园豆:145 (初学一级) | 2011-08-16 10:00
谢谢回答,{}有用,野指针都会引发错误,这点我同意,但是不是这个问题的关键,关键在于:
http://www.cnblogs.com/hitwtx/archive/2011/08/17/2143673.html
支持(0) 反对(0) wtx | 园豆:160 (初学一级) | 2011-08-17 22:22
0

有点不理解的是这个作用域和一个函数的作用于相同吗?

麦田里的守望者 | 园豆:428 (菜鸟二级) | 2011-08-16 10:23
你是在函数开始声明的P当然他的作用域就是test了。
支持(0) 反对(0) 静幽独白 | 园豆:145 (初学一级) | 2011-08-16 10:25
楼主,我想明白了,这个函数内部的作用域类似与if(){}else{}中的作用域,所以p的值在离开中间那个{}就是修改后的值,所以test()可以正常运行,p也不是野指针。
支持(0) 反对(0) 麦田里的守望者 | 园豆:428 (菜鸟二级) | 2011-08-16 10:30
谢谢回答;p是野指针没错,请看
http://www.cnblogs.com/hitwtx/archive/2011/08/17/2143673.html
支持(0) 反对(0) wtx | 园豆:160 (初学一级) | 2011-08-17 22:23
0

A的这个方法是关键。。

因为这个方法内没有访问A的任务东东。也就是没有访问this指针。因此调用有效。

如果方法中有访问A的字段就不行了。。

 

边城浪 | 园豆:264 (菜鸟二级) | 2011-08-16 15:30
谢谢,但是你的回答应该是不对的 请看
http://www.cnblogs.com/hitwtx/archive/2011/08/17/2143673.html
支持(0) 反对(0) wtx | 园豆:160 (初学一级) | 2011-08-17 22:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册