请问C语言free(p)释放p所指向的动态内存后p指向哪?是NULL还是随机还是什么呢?

 我来答
自我编程
2019-01-23 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部
释放后指向随机地址。
所以free后,如果没有新地址给指针变量,p就应该给空值NULL。否则就是“野指针”。
追问
谢谢您的解答。
您能给我说说为什么那个程序第二个printf输出的p的指向为什么与第一个一样吗?不是应该变成另一个随机值吗?
追答
释放的是分配内存空间,p说到底只是变量,里面的值没变,但原地址空间已经没了啊。
程序复杂的话,你能知道p指向的的地址在内存中是哪个啊。
Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
刀劈华山
2019-01-23 · TA获得超过2273个赞
知道小有建树答主
回答量:1338
采纳率:72%
帮助的人:388万
展开全部
free释放后p仍然指向那块内存,所以第二次printf的值仍然和第一个一样。
但是!不代表这样的p指向的这块已经free的内存仍然可以用!!!
你两次printf打印的都是p而不是p指向的内容(内存),如果p在free后没有给他赋新的值那么p的打印永远都是这个值,但是这个值是一个地址,而这个地址所指向的内存‘可能’已经被破坏了,因为内存被free了,其他进程就可以使用这块内存。
这里‘可能’这个词要注意,就是说你可能在第二个甚至第N个printf打印出p所指向的值是一样的并没有在free后被改变,这就是所谓的野指针,一块内存从malloc开始从‘野’变‘家养’,然后通过free把‘家养’又变成了‘野’
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雾尽酣来
2019-01-23 · TA获得超过428个赞
知道小有建树答主
回答量:263
采纳率:76%
帮助的人:62.2万
展开全部
p还是指向原来的地址,你不重新赋值,它一般不会变。但这块地址已经被标记为回收,因此再访问就会数组越界,而数组越界报错是操作系统管理的,如果撇去操作系统的内存管理机制,那么你强制再用p是可以访问到释放前的内存空间的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
上高下新风N
2019-01-23 · 超过11用户采纳过TA的回答
知道答主
回答量:94
采纳率:22%
帮助的人:26万
展开全部
人们都说:“熟读唐诗三百首,不会作诗也会吟 [6] 。”可见《唐诗三百首》影响之大。流行注本编辑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式