野指针危害真的很大吗?

想要知道野指针危害到底有多大,首先需要知道野指针是怎么形成的,以及形成野指针会带来什么本质上的缺点。

当然,野指针嘛,毕竟还是个指针。如果不了解什么是指针的话,可以参考一下我的另外一篇回答:如何向计算机小白解释C语言指针?。

这里我们举个例子来说明什么是野指针,还是上学期,学妹找我借书,李航写的,统计学习方法。我就告诉她,书给我放到实验室我位置上的柜子上了。

就相当于我指向一个数据给他,让她去那里找,然后按照正常的套路,她就拿到书快乐的学习了。但是,如果这本书被别的同学拿走了,还有可能别的同学往里面,放了一些奇奇怪怪的别的书,这个时候学妹拿走的书是什么东西,就无解。

她以为她拿到了正常的数据,我也以为我给了她正常的数据,谁曾想,她拿的并不是她想要的书,然后她就开始读这本书了,读到她硕士毕业,发现错了,最后被延毕了,整个系统就崩了。

这件事情的危害就在于:错!不要紧!错了三年,系统崩了就出大问题

好好好,把刚才这个故事,转化成专业术语来一遍:野指针,说的就是一个指针,指向一块数据。也就是这个指针变量里面存的是这个数据的地址,突然有一天,这个数据被别人释放了,然后剩下一个空的内存空间,还可以存别的数据。但是系统并不报错,一直在运行,程序员也不可能去验证每个数据跑地对不对,所以就一直这么错下去了。打工人打了几十年的白工!

野指针,就是指向一个已删除的对象或者未申请访问受限内存区域的指针。

危害是可能导致整个系统崩了,最大的问题在于,很难被debug,也就是很难找到错误!

导致这个问题很容易出现的原因在于:free和delete只是把指针所指的 内存给释放掉,但并没有把指针本身干掉

想要比较好地去避免这个问题,可以采用在释放内存之后,将指针赋值为NULL。所以很多人都会自己封装一个free宏,在释放内存的同时将这个指针置NULL

你可能感兴趣的:(野指针危害真的很大吗?)