您的位置:首页 > 其它

指针类型学习总结--迷途指针

2015-12-04 14:31 302 查看
December 4, 2015 2:28 PM

上一节总结了指针类型,对一些常见以及不常见的指针类型进行了区分,这一节,介绍一下迷途指针。

迷途指针又叫失控指针或悬浮指针,是当对一个指针被执行delete,这时会释放放它所指向的内存,但是你并没有把它设置成空时产生的,如果你没有重新赋值,就试图在进行使用此指针。如果是这样的,引发的后果将是不可想象的,也是不可预料的。

#include <iostream>
using namespace std;
int main()
{
int* pInt = 0;
pInt = new int;
*pInt = 38;
cout<<"*pInt = "<<*pInt<<endl;
delete pInt;//pInt成为为一个迷途指针!

long *pLong = new long;
*pLong = 68;
cout<<"*pLong =  "<<*pLong<<endl;

*pInt=20;      //再次使用pInt!
cout<<"*pInt = "<<*pInt<<endl;
cout<<"*pLong =  "<<*pLong<<endl;
delete pLong;

return 0;
}


运行结果为:

*pInt = 38
*pLong =  68
*pInt = 20
*pLong =  20


可见,尽管使用delete将pInt指针删除,并重新声明一个新的指针pLong,但是它们都指向一个相同的地址,即pInt仍然指向这块内存区域。程序把68赋值给pLong后,,当把20赋值给迷途指针pInt时,也就是把20赋值给pInt所指向的内存区域,也是pLong所指向的内存。因此,打印的结果变成了20。

通常,如果在删除一个指针后又把它删除一次,程序就会变得非常不稳定,任何情况都有可能发生。但是如果你只是删除了一个空指针,则什么事情都不会发生,这样做非常安全。所以,大部分情况下,我们应该把迷途指针该为空指针,即:pInt = NULL或者pInt = 0;

尽管使用迷途指针或空指针是非法的,也容易引起程序崩溃,但是空指针导致的程序崩溃是一种可预料的崩溃,这样调试起来就方便得多。

上一节 指针类型学习总结(函数指针、数组指针和指针数组)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: