为什么free之后还要NULL?

发布于 2022-10-15 09:20:48 字数 147 浏览 36 评论 0

用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。
这是什么原因?
一般全局变量的话,编译器会在默认状态下赋予初值。但是我想知道
对于局部变量为什么不初始化?
NULL背后到底是什么?
在线等哦!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

鹤仙姿 2022-10-22 09:20:49

不一定需要

可是我不能没有你 2022-10-22 09:20:49

不用的,

零度° 2022-10-22 09:20:49

你如果想偷懒呢也可以不写

去了角落 2022-10-22 09:20:49

只是一种习惯,只要你能保证free后不再继续使用就行。
free后立即设置为NULL,如果后来不小心用到了程序会立即被kill掉。但是如果不设置NULL,如果不小心用到了,会出现各种奇怪的问题。
free为NULL,仅是一种习惯

彩虹直至黑白 2022-10-22 09:20:49

{:3_199:}当你裸奔时体会到,你就感觉那是灾难。

三生殊途 2022-10-22 09:20:49

举个例子
假如多线程共享数据,一个线程free/delete一个元素,另一个线程还引用可能会使整个程序崩掉
设置为NULL可以逻辑判断下,如果为空,就不使用它了。

眼睛会笑 2022-10-22 09:20:49

1、这是什么原因?
你都说了是防止野指针,要养成释放后把指针指空的好习惯,本人就曾因为这个问题而出现过问题。
2、一般全局变量的话,编译器会在默认状态下赋予初值。但是我想知道对于局部变量为什么不初始化?
首先纠正个问题,貌似编译器不会给未初始化的全局变量赋初值的。未初始化的全局变量是放在BSS段中的,该段会被系统清零,所以未被初始化的全局变量体现为被初始化为0,而局部变量(非static的变量)会在每次被调用时临时非配到堆栈空间当中,其地址是不确定的,所以需要显式初始化。
3、NULL背后到底是什么?
不知道NULL背后是什么,可以认为NULL为(void*)0

心清如水 2022-10-22 09:20:49

回复 8# zhl168

    说得好~~

何必那么矫情 2022-10-22 09:20:49

偶也,

free之后就置空,

这事我常干,哈哈。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文