为什么free之后还要NULL?
用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。
这是什么原因?
一般全局变量的话,编译器会在默认状态下赋予初值。但是我想知道
对于局部变量为什么不初始化?
NULL背后到底是什么?
在线等哦!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。
这是什么原因?
一般全局变量的话,编译器会在默认状态下赋予初值。但是我想知道
对于局部变量为什么不初始化?
NULL背后到底是什么?
在线等哦!!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
不一定需要
不用的,
你如果想偷懒呢也可以不写
只是一种习惯,只要你能保证free后不再继续使用就行。
free后立即设置为NULL,如果后来不小心用到了程序会立即被kill掉。但是如果不设置NULL,如果不小心用到了,会出现各种奇怪的问题。
free为NULL,仅是一种习惯
{:3_199:}当你裸奔时体会到,你就感觉那是灾难。
举个例子
假如多线程共享数据,一个线程free/delete一个元素,另一个线程还引用可能会使整个程序崩掉
设置为NULL可以逻辑判断下,如果为空,就不使用它了。
1、这是什么原因?
你都说了是防止野指针,要养成释放后把指针指空的好习惯,本人就曾因为这个问题而出现过问题。
2、一般全局变量的话,编译器会在默认状态下赋予初值。但是我想知道对于局部变量为什么不初始化?
首先纠正个问题,貌似编译器不会给未初始化的全局变量赋初值的。未初始化的全局变量是放在BSS段中的,该段会被系统清零,所以未被初始化的全局变量体现为被初始化为0,而局部变量(非static的变量)会在每次被调用时临时非配到堆栈空间当中,其地址是不确定的,所以需要显式初始化。
3、NULL背后到底是什么?
不知道NULL背后是什么,可以认为NULL为(void*)0
回复 8# zhl168
说得好~~
偶也,
free之后就置空,
这事我常干,哈哈。