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

本文详细解释了迷途指针的概念及其潜在的危害,并通过代码示例展示了如何避免产生迷途指针,同时对比了迷途指针与空指针的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:什么是迷途指针?

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

(关于new与delete的知识参考:http://blog.youkuaiyun.com/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;//此时需要再次删除pInt
long * 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;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值