空悬指针及其避免出现的解决方法
来源:互联网 发布:站长工具 ip 域名 编辑:程序博客网 时间:2024/06/02 13:13
/*什么叫空悬指针:指针所指向的存储区的生存期以及结束,但是指针的生存期还没有结束,导致
存储区的数据已经被释放,指针所指的区域是个随机值的这种错误。那么这个指针就叫空悬指针。
出现空悬指针的两种常见情况:
1.函数返回一个自动型局部变量的地址,我以前就经常出现这种情况
2.删除一个动态分配的对象以后,没有将指针指0,后面使用到这个指针的时候其实已经指向一个
随机值。
对2的一点补充,注意动态分配的时候,指针的生存期跟指针所指区域的生存期是两个不同的概念。
指针的生存期从程序开始运行开始,结束于程序结束运行,指针本身的存储区间是编译的时候就
确定的,指针所指的动态分配的区间的生存期从new开始,到delete结束,所以如果调用delete后
没有把指针指0就出现了空悬指针,此时很容易犯错误。
解决空悬指针的方法:1.对应情况1,函数返回一个静态局部变量
2.对应情况2,调用delete以后,将指针指空。
*/
#include<iostream>
using namespace std;
int * add1(const int & a,const int &b)
{
int c=a+b;
cout<<"在函数add1的内部结果为"<<c<<endl;
return &c;
}
//哈哈,在编译这个函数的时候vc6.0给出了下面的警告:
//warning C4172: returning address of local variable or temporary
int * add2(const int &a,const int & b)
{
static int c=a+b;
cout<<"在函数add2的内部结果为"<<c<<endl;
return &c;
}
int * add3(const int &a,const int &b)
{
int *p=new int;
*p=a+b;
cout<<"在函数add3的内部结果为"<<*p<<endl;
return p;
}
void main()
{
int a=1,b=2,*p;
cout<<"调用add1返回一个空悬指针/n";
p=add1(a,b);
cout<<"指针所指的值为"<<*p<<endl;
cout<<"指针所指的值发生改变 了吗?/n"<<(*p==3?"没有改变":"改变")<<endl;
cout<<"调用add2可以避免返回一个空悬指针 "<<endl;
p=add2(a,b);
cout<<"指针所指的值为"<<*p<<endl;
cout<<"指针所指的值发生改变 了吗?/n"<<(*p==3?"没有改变":"改变")<<endl;
cout<<"调用add3可以避免返回一个空悬指针 "<<endl;
p=add3(a,b);
cout<<"指针所指的值为"<<*p<<endl;
cout<<"指针所指的值发生改变 了吗?/n"<<(*p==3?"没有改变":"改变")<<endl;
delete p;
p=0;
}
- 空悬指针及其避免出现的解决方法
- 常见空指针异常及其避免
- Atitit避免出现空指针异常解决方案
- java中判断空字符串时避免出现空指针的方法
- 避免空指针。。。。。教训。。。。
- java---避免空指针
- Java避免空指针
- Java避免空指针
- 野指针的产生及其避免
- 野指针及其有效的避免方法
- java中,“避免出现空指针”和“如何快速定位空指针”
- 指针的测试与空指针的避免
- 野指针及其避免
- 在fragment跳转到activity是出现onSaveInstanceState空指针的解决方法
- Java避免空指针处理
- findViewById返回空指针的解决方法
- java中避免空指针的一些技巧
- equals方法避免空指针的比较方法
- google帐号进不去啦现在是(当前日期: 2007-07-20 星期五,当前时间: 1:22:59.64)
- Decorator 解决的问题
- 对指针交换的讨论
- 给调用函数传递数组的元素个数的几种有效方法
- 对函数返回值的操作是否改变实参的讨论
- 空悬指针及其避免出现的解决方法
- 设计模式--Decorator---结构型
- 六种不同指针的使用方法
- google必须回答的问题:你检索出100W记录来作什么,我只需要其中的10条[原创]
- Struts报No getter method for property的问题!!!
- ZOJ-1045-HangOver
- 可能你不知道的内存泄漏
- Jakarta Commons项目组介绍(一)
- Jakarta Commons项目组介绍(二)