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

释放堆上分配的container结构体是否会同时释放其关联的request子结构体?

结论

你的理解是正确的,释放con不会影响requests指向的堆内存,只要requests本身在当前作用域可访问,就可以正常访问它指向的结构体成员。

原理说明
  • C语言的free只会释放传入指针指向的对应单次malloc分配的堆内存块,不会递归释放指针成员指向的其他内存,更不会修改和堆内存无关的变量值。
  • 你的代码里三类内存的关系是:
    1. 栈/全局区:存储requests指针变量(值是struct request堆内存的地址)、存储con指针变量(值是struct container堆内存的地址)
    2. 堆内存A:malloc出来的struct request结构体,由requests指向
    3. 堆内存B:malloc出来的struct container结构体,由con指向,它的request成员存储的是requests指针变量的地址
  • 调用free(con)只会释放堆内存B,既不会修改requests指针本身的值,也不会触碰堆内存A,因此堆内存A仍然有效。
语法注意

你写的访问语法*(requests+0)->status存在运算符优先级错误,->优先级高于*,会先执行requests+0->status导致编译失败。正确的写法可以是以下任意一种:

requests->status;
requests[0].status;
(*(requests + 0)).status;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:24:06