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

C++使用stack存储Node指针时仅调用pop出现内存泄漏原因咨询

C++ stack存储原生指针直接pop内存泄漏问题解答
  • 内存泄漏和默认构造函数没有任何关联,核心原因是C++标准库stack的pop操作仅会移除容器内存储的元素本身,不会处理原生指针指向的堆内存。你存到栈里的是Node*类型的指针,它只是一个保存堆内存地址的变量,pop操作只会把这个地址变量从栈里删掉,你之前通过new申请的Node对象本身在堆上,失去指向它的指针后就再也无法被访问和释放,自然产生内存泄漏。
  • 不能直接简化为仅调用pop的写法,要实现自动释放有两种改造方案:
    • 把栈的声明改为stack<unique_ptr<Node>>,使用智能指针托管堆内存,此时pop触发unique_ptr析构会自动释放指向的Node对象,不需要手动写delete逻辑,直接调用pop即可。
    • 如果必须使用原生指针存储,「先取栈顶指针→delete释放指向的堆内存→再调用pop移除栈内的指针变量」是该场景下的标准规范写法,不能省略delete步骤。
  • 额外注意:如果你的Node类内部的3个同类型指针也是指向堆上申请的节点,需要在Node的析构函数中正确释放这三个指针指向的内存,否则即使释放了当前节点,子节点的内存依然会泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:06:04