You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何释放内存后,悬空指针仍显示相同的内存地址?

问题解析

首先你的代码里存在两个核心问题:

  • 错误的free操作
    你先用malloc分配了堆内存给ptr_a,但随后把ptr_a赋值为栈变量a的地址&a。此时ptr_a已不再指向堆内存,而free仅能释放堆上通过malloc/calloc/realloc分配的内存,栈内存由系统自动管理,不能用free释放——这行free(ptr_a)属于非法操作,会触发未定义行为。

  • 指针变量的本质
    指针本身是个存储内存地址的变量。free的作用是告知操作系统:之前分配的堆内存可被回收复用,但它不会修改指针变量自身存储的地址值。哪怕你释放了正确的堆内存,指针变量里的地址数值也不会自动改变,只是该地址对应的内存已不属于你的程序,此时指针成为悬空指针。

回到你的代码,ptr_a存储的是a的地址,free操作虽非法,但并未改变ptr_a内的地址值,因此两次打印的地址完全相同。


内容的提问来源于stack exchange,提问作者Debojit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:00:11