请问C语言free(p)释放p所指向的动态内存后p指向哪?是NULL还是随机还是什么呢?
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
展开全部
free释放后p仍然指向那块内存,所以第二次printf的值仍然和第一个一样。
但是!不代表这样的p指向的这块已经free的内存仍然可以用!!!
你两次printf打印的都是p而不是p指向的内容(内存),如果p在free后没有给他赋新的值那么p的打印永远都是这个值,但是这个值是一个地址,而这个地址所指向的内存‘可能’已经被破坏了,因为内存被free了,其他进程就可以使用这块内存。
这里‘可能’这个词要注意,就是说你可能在第二个甚至第N个printf打印出p所指向的值是一样的并没有在free后被改变,这就是所谓的野指针,一块内存从malloc开始从‘野’变‘家养’,然后通过free把‘家养’又变成了‘野’
但是!不代表这样的p指向的这块已经free的内存仍然可以用!!!
你两次printf打印的都是p而不是p指向的内容(内存),如果p在free后没有给他赋新的值那么p的打印永远都是这个值,但是这个值是一个地址,而这个地址所指向的内存‘可能’已经被破坏了,因为内存被free了,其他进程就可以使用这块内存。
这里‘可能’这个词要注意,就是说你可能在第二个甚至第N个printf打印出p所指向的值是一样的并没有在free后被改变,这就是所谓的野指针,一块内存从malloc开始从‘野’变‘家养’,然后通过free把‘家养’又变成了‘野’
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p还是指向原来的地址,你不重新赋值,它一般不会变。但这块地址已经被标记为回收,因此再访问就会数组越界,而数组越界报错是操作系统管理的,如果撇去操作系统的内存管理机制,那么你强制再用p是可以访问到释放前的内存空间的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
人们都说:“熟读唐诗三百首,不会作诗也会吟 [6] 。”可见《唐诗三百首》影响之大。流行注本编辑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询