C/C++学习笔记20:迷途指针

来源:互联网 发布:tf idf算法java实现 编辑:程序博客网 时间:2024/06/06 02:55

1:什么是迷途指针?

迷途指针也叫悬浮指针、失控指针,是当个对一个指针进行delete操作以后(这样可以释放它所指向的内存),而并没有把它设置为空指针时产生的。而后却没有重新赋值就试图再次使用该指针,引起的结果不可预料。

(关于new与delete的知识参考:http://blog.csdn.net/gzbaishabi/article/details/25976801)

总之:在删除指针后不小心再使用它,虽然这个指针仍然指向原来的内存区域,但是编译器已经把这块内存区域分配给了其他数据,再次使用这个指针,有可能会导致程序崩溃。更糟糕的是,程序可能表面上运行的很好,过不了几分钟就崩溃了。

因此要求:在删除一个指针以后,要把它设置为空指针(0)。

e.g.1分析下列代码有何错误?会造成什么原因?

type unsigned short int USHORT;#include <iostream>int main(){USHORT *pInt = new USHORT;*pInt = 10;cout << "*pInt:"<<*pInt << endl;delete pInt; //pInt是一个迷途指针pInt = 0; //将p指针设置为空指针
//delete pInt;//此时需要再次删除pIntlong * pLong = new long ;*pLong = 90000;cout << "*pLong:"<<*pLong <<endl;*pInt = 20;//把值20赋给pInt所指向的区域,但是pInt不指向任何有效空间cout << "*pInt:" <<*pInt << endl;cout << "*pLong:" <<*pLong << endl;return 0;}

2:迷途指针与空指针有什么区别?

当delete一个指针的时候,实际上是编译器释放内存,但指针本身依然存在,这时它就是一个迷途指针。

使用以下语句可以把一个迷途指针改为空指针:

MyPtr = 0;




0 0
原创粉丝点击