在函数中动态内存free后,指针是否置为NULL

img


在释放p指向的内存后,还需要将p设置为NULL吗?已知int *p是局部变量,被赋值L.data的地址,函数运行完毕后自动清理存放变量p的内存,那么p里的地址还存在吗,如果存在还指向原来的地址吗?

建议置NULL,但不强求。
你这个代码有问题啊,p=L.data在p = (int *)malloc之前,L.data的值已经发生变化了。p指向的是L.data原来的地址!!

free只是用来释放指针指向的内存,但这个指针自身的地址不会被赋值为NULL,需要你自己增加p=NULL;
就你这段代码来说,不加p=NULL也无所谓。不过增加p=NULL是个好的编程习惯

p本身是个局部变量
函数执行完毕,p本身都被回收了,没有p这个变量了,也就更不存在p里的地址了
p本身是通过int*定义的,所以它会自动回收
由malloc申请的空间则不会自动回收,必须手动回收,否则会有内存泄漏
当然,手动回收可以在使用完毕之后回收,并不一定必须在申请它的函数里面,在外面也行
-=-=-=
回到你的代码,你这个函数明显是要将L.data填充值
而你在函数结束之后直接free(p),那函数执行了个寂寞,L.data还是个野指针呀
你必须在L用完了才回收它,不要刚初始化完毕就回收它

不需要(设置为NULL的目的仅仅是最大限度地避免释放后还被读写),存在,是的。
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
无malloc/calloc,无free
无new,无delete
无new[],无delete[]

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632