有关迷途指针

迷途(stray)指针,也被称为野(wild)指针或悬浮(dangling)指针,是指将delete 用于指针(从而释放它指向的内存),但没有将它设置为空时引发。如果随后你在没有重新赋值的情况下使用该指针,后果将是不可预料的:程序崩溃算你走运。

指针指向堆空间,delete之后,只是回收内存。并不改变指针的值。
再删除一个指针之后,一定要将其赋值为空。虽然使用空指针是非法的,容易使程序崩溃,但是我们宁愿使程序崩溃也不远使程序调试起来很困难。
如下例:
#include <iostream>
using namespace std;
int main()
{
     int *p=new int;
     *p=3;
     cout<<"将3赋给p的地址后,指针p读取的值:\t"<<*p<<endl;
     delete p;
     p=0;
     //cout<<"删除空间后,指针p读取的值:\t\t"<<*p<<endl;
     long *p1=new long;
     cout<<"创建新空间后,指针p中保存的地址:\t"<<p<<endl;
     *p1=999999;
     cout<<"指向新空间的指针p1保存的地址:\t\t"<<p1<<endl;
     p=new int;
     *p=23;
     cout<<"将23赋给p的地址后,指针p读取的值:\t"<<*p<<endl;
     cout<<"将23赋给p的地址后,指针p1读取的值:\t"<<*p1<<endl;
     delete p1;
     return 0;
}
在删除p时,如果没有给其赋值为空的话( p=0;),则编译器会默认将释放掉的空间收回然后分配给新开辟的空间。因此当新定义的指向新开辟的long型变量空间的指针p1,这个p1其实指向的是释放掉的空间,也就是p指向的空间。因此对指针p的操作会影响到p1所指向的值,并且这样的错误很难调试。
注意:delete某指针后,只是回收该指针所指向的空间,该指针的值不变。你可以手动将其赋为null。new的主要目的就是分配空间,而delete主要目的也正是回收空间。并不操作指针值,因此你delete p之后,再输出指针p的地址应该还是之前的地址,而值已经不再是你所赋的值。应该是一个无法预计的数,但是由于你还可以拥有该指针,因此你可以使用该指针给该空间赋值,这样可能会引起不必要的麻烦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值