前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中的迷途指针

C语言中的迷途指针

原创
作者头像
诸葛青云
修改2018-09-10 17:11:59
9560
修改2018-09-10 17:11:59
举报

一、何为迷途指针。

迷途指针,顾名思义就是迷路的指针,当然开个玩笑,其实也就是如果内存已经释放(如用free函数),但是指针却在继续引用原始内存,像这样的指针,我们就称为迷途指针。

有这样一小段代码,如:

int *p=(int *)malloc(sizeof(int));

free(p);

这一段代码,程序会在堆中分配一个整形长度的内存,比如这段内存的首地址是1000,那么指针变量p的值为1000,当调用函数free释放这段内存时,指针变量p的值任然是1000,虽然这段内存已被释放,但这段内存中任然可能包含原值,但此生指针p已指向的不是一个有效的对象,因为这段内存可能会被重新利用,里面的数据也是不确定的,由于大部分运行时系统不会阻止对后续的访问与修改,所以如果我们试图解引一个已释放的指针,其行为是未定义的,那么将可能引起很多问题,如:如果再次访问这段内存,其行为是不可预期的、潜在的安全隐患、段错误(内存不可访问)等等问题。

再比如:

int *p=(int *)malloc(sizeof(int));

①:*p=5;

free(p);

②:*p=10;

①那一句代码给分配的内存写入了数据,是可以的,但是在释放过会又去向释放的内存中写入数据,行为是不可预期的,虽然你向这段内存中写入了数据,但是这段内存已被释放,这段内存可以重新被利用,所以虽然写入了10,但可能会被其他利用这段内存程序改变,因此行为不可逾期。

小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程

二、处理迷途指针

迷途指针引起的错误往往很难发现也难解决,我们可以用以下方式来处理迷途指针:

1、释放后设置为NULL。要是后面再次使用此指针会中指程序。注意赋值只会影响被赋值的指针。多指针的话还会有问题。

2、用第三方工具检查迷途指针。

3、自己写一个函数代替free函数。

好了今天暂时只介绍到这里,每天介绍一个小知识,有助于提高编程水平哦。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档