指针被释放后,是不是就变成了空指针?这是很多刚接触指针的同学存在的误区。
我们还是写个代码看下:
char *p = (char *)malloc(sizeof(char) * 128);定义一个指针,然后在堆空间申请一块内存,这种赋值方式就表示指针指向堆空间,画出来就是这样的。
内存用完之后,还得养成释放的习惯,如果不释放,那这块内存一直被占有,其他人就用不了,这就是所谓的内存泄漏。
释放内存使用函数free,参数就是这块内存的地址。
free(p);在图上的表现就是,这块内存自由了,如果后面有其他地方要使用内存,那操作系统完全可以把这块内存再分配出去。
此时,指针p没有任何的变化,它里面还是保存刚才的地址0x100,只是0x100这块内存已经被释放了,p并不是空指针,我们可以把它称作悬空指针,那悬空指针能不能访问?
char*p=(char*)malloc(sizeof(char) * 128); free(p); strcpy(p,"helloworld");如果你强行去访问的话,就会出现一些未知的问题。
我们在学习的时候,写的代码通常比较少,内存使用的也不多,所以大部分情况下你去访问已经释放的内存好像也没什么问题,其实这是一个误区。
如果把它放到项目中,代码量比较大,内存使用比较多,就会导致一系列意想不到的问题。
所以正确的做法应该是,内存释放后,再加上一条语句:
p = NULL;把p变成空指针。
虽然空指针也不能通过 * 去访问,但是空指针是可控的,有的时候加上一些判断,就能有效的防止一些意外的发生。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内存泄漏
+关注
关注
0文章
39浏览量
9201
原文标题:悬空指针和空指针
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
TPA6013A4SEDIFF PIN和SEMAX PIN能不能悬空?
在BTL模式下驱动扬声器时,VOLUME引脚是控制增益的唯一引脚. SEDIFF PIN和SEMAX PIN能不能悬空?
发表于 09-29 09:10
恒生电子总裁刘曙峰:一个特别重要的挑战就是能不能跟得上这个变化
“金融科技行业的最大风险就是跟不上变化。新技术来了,技术变革了,你能不能跟得上?你能不能跟得上业务的变化?”
谐波治理到底能不能节电
谐波治理到底能不能节电?”这是我们做电能质量行业经常会被问到的一个问题。随着国家对节能减排项目的大力支持,有不少商业人士一拥而上加入到节能行业,想要分得节能市场的一杯羹。那么,通过谐波治理到底能不能实现节能的效果呢?
发表于 04-23 15:50
•3476次阅读
C语言中的悬空指针和野指针是什么意思?
提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:“悬空指针”和“野
拼接屏能不能触屏操作?
拼接屏能不能直接触屏操作,小编回答可以的,实际上很多客户购买拼接屏时都会提出拼接屏能不能加触摸的功能?我们回复是可以的,那是一种怎样的原理呢? 拼接屏一般是用来大屏展示,用来播放文字、图像等内容
评论