| 关键词: nbsp 指针 迷途 内存 一个 指向 PBt PDt 程序 后果 |
首先,我们来明确一下什么是迷途指针,迷途指针,也被称为失控指针或悬浮指针,是当对一个指针高用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之间的区别就是一个是空指针,一个是迷途指针。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|