浅谈迷途指针
首先,我们来明确一下什么是迷途指针,迷途指针,也被称为失控指针或悬浮指针,是当对一个指针高用delete时,这时会释放放它所指向的内存,但是你并没有把它设置成空时产生的,如果你没有重新赋值,就试图在进行使用此指针。如果是这样的,引发的后果将是不可想象的,也是不可预料的。
说到这里,我们举例来说明一下,如一个电话号码,如果使用这个号码的人也搬家了,你确依然使用这个原来的号码,这不会导致什么严重的后果,也许是个空号,也许是是个无人接听的电话等等,,如果这个号码被重新分配了一下,分配到了那个易做图要员或分配给了那个军事人物的家中,你所打的这个电话就可能是一个喧燃易做图了。
总之。在删除指针之后,要小心不要在使用它了,虽然,这个指针仍然指向原来的内存区域,但是编释器,以把这个内存区域分配给了其他的数据,使用,如果,再次的使用,,程序的崩溃可能算你是幸福的,也有可能是程序表面上可能运行的很好,但是用不了几分钟,你的这个程序就会以崩溃而告终,为了安全起见,在删除了一个指针后把它设置为空指针,这样做就可以消除了它的危险性,也可使我们必免了一些灾难性的后果。
例:警告:此程序为一个有意建立的迷途指针,,为说明他的危险性,请不要编译运行,否则,后果自负。
1: typedef unsigned short int UNSHORT;
2: #include<iostream>
3: int main()
4: {
5: UNSHORT *PBt=new UNSHORT;
6: * pBt=10;
7: std::cout<<"*PBt:"<<*PBT<<std::endl;
8: delete PBt ;
9: long *PDt=new long;
10: *PDt=100;
11: std::cout<<"*PDt:"<<*PDt<<std::endl;
12: *PBt=30;
13: std::cout<<"*PBt:"<<*PBt<<std::endl;
14: delete PDt;
15: PDt=0;
16: return 0;
17: }
我们来看看这个程序,PBt是一个指向UNSHORT(unsigned short int)的指针,而且这使PBt指向新分配的内存空间,在程序中把10赋给了该内存区域,,并将之打印,之后,该指针调用了delete,这时PBT就成了个迷途指,再此之后又声名一个新的指针PDt,PDt指向了一个由new分配的内存空间,然后,将100赋给了这个指针PDt,虽之打印,下面又把30赋给了了指针PBt所指向的内存区域。
在这里大家看到了什么呢?
一个迷途指针,在这里我们就可以看到了指针PDt不指向任何有效的内存空间,PBt所指向的内存空间以由调用的delete释放了,在这块内存区域中,在次的赋值,就产生了不可想象的后果。
最后,我们来看看迷途指针是什么呢?
迷途指针:指当你删除指针时,实际上是让编译器释放内存,但是指针本身依然存在,这时这个指针就是一个非常危险的迷途指针,所以如前面我们所讲的在删除指针后最好是把它设置为空指针,如上面程序中的第15行PDt=0;这时PDt与PBt之间的区别就是一个是空指针,一个是迷途指针。
补充:综合编程 , 安全编程 ,