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

来源:互联网 发布:泗阳网络问政12345 编辑:程序博客网 时间:2024/05/21 18:48

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

上一节 指针类型学习总结(函数指针、数组指针和指针数组)

2 0
原创粉丝点击