迷途指针(又称为,悬浮指针或失控指针)

来源:互联网 发布:淘宝手机保修 编辑:程序博客网 时间:2024/06/10 23:17

编程中有一种很难发现的错误是迷途指针。迷途指针也叫悬浮指针(失控指针),是对一个指针进行delete操作后并没有把它设置为空时产生的。在C++中,delete一个指针仅仅是释放它所指向的内存,即把这块内存区标明为可用,而不会改变指针所指向的地址值。而后,你如果没有重新赋值就试图再次使用该指针,引起的结果是不可预料的。

根据前人的经验,在删除指针后小心不要再使用它。虽然这个指针仍然指向原来的内存区域,但是编译器已经将这块内存区域分配给了其他的数据。再次使用这个指针会导致你的程序崩溃。

以下面这段代码为例:

#include   <iostream>
typedef unsigned short int USHORT;
using namespace std;
void main()
{
 USHORT *pInt = new USHORT;
 *pInt=10;
 cout<<"pInt指向的内存地址为:"<<pInt<<endl;
 cout<<"pInt指向内存中存储的值为: "<<*pInt<<endl;
 delete pInt;   //pInt为一迷途指针! 应补上一句pInt=0
 long *pLong = new long;
 *pLong=90000;
 cout<<"pLong指向的内存地址为:"<<pLong<<endl;
 cout<<"pLong指向内存中存储的值为: "<<*pLong<<endl;
 *pInt=20;      //再次使用pInt!
 cout<<"pInt指向的内存地址为:"<<pInt<<endl;
 cout<<"pInt指向内存中存储的值为: "<<*pInt<<endl;
 delete   pLong;
}

输出结果为:

pInt指向的内存地址为:00395C98
pInt指向内存中存储的值为: 10
pLong指向的内存地址为:00395C98
pLong指向内存中存储的值为: 90000
pInt指向的内存地址为:00395C98
pInt指向内存中存储的值为: 20
请按任意键继续. . .

 

我们可以看到,尽管前面删除了pInt,但是它所指向的地址没有改变,仍然可以利用pInt改变内存中的值,如果这段内存被别的程序所使用,很有可能造成程序崩溃。正确的处理方式是,delete一个指针后,将该指针定义为空指针,pInt=0,尽管空指针也可能造成程序崩溃,但这种崩溃是可预料的崩溃,调试起来会方便很多。

0 0
原创粉丝点击