重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
free函数实现通知系统回收相关资源,即让当前分配的内存可以重新被其他应用所使用。
创新互联是一家专业提供六安企业网站建设,专注与网站建设、成都网站设计、H5页面制作、小程序制作等业务。10年已为六安众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
如果你还想使用这块内存就不要去释放它!(好比是,你借了别人的车,用完后,还给了人家,还给人家后,你还要开人家的车,能行吗?)
引用别人的描述:
3、free()到底释放了什么
这个问题比较简单,其实我是想和第二大部分的题目相呼应而已!哈哈!free()释放的是指针指向的内存!注意!释放的是内存,不是指针!这点非常非常重要!指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,前面我已经说过了,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。非常重要啊这一点!
参考:
;nid=68136
A 典型的返回局部变量地址,局部auto变量,在出函数后,其作用域/生存期都结束,被系统回收,不可在被直接使用
B 典型的野指针问题,ptr值为垃圾值,其指向不定
C 函数本身没有什么问题,只是由于(*ptr)值不定而已
快乐的野指针,就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
野指针很可能触发运行时段错误( Sgmentation fault)
因为指针变量在定义时如果未初始化,值也是随机的。指针变量的值其实就是别的变量(指针所指向的那个变量)的地址,所以意味着这个指针指向了一个地址是不确定的变量,这时候去解引用就是去访问这个地址不确定的变量,所以结果是不可知的。
野指针因为指向地址是不可预知的,所以有3种情况:第一种是指向不可访问(操作系统不允许访问的敏感地址,譬如内核空间)的地址,结果是触发段错误,这种算是最好的情况了。第二种是指向一个可用的、而且没什么特别意义的空间(譬如我们曾经使用过但是已经不用的栈空间或堆空间),这时候程序运行不会出错,也不会对当前程序造成损害,这种情况下会掩盖你的程序错误,让你以为程序没问题,其实是有问题的