You need to enable JavaScript to run this app. 为什么我在C++中删除动态分配的指针时会出现错误?
优惠活动
大模型
产品
解决方案
定价
更多

为什么我在C++中删除动态分配的指针时会出现错误?

delete触发报错的核心原因
  • 代码存在内存所有权严重错配问题,属于C++标准定义的未定义行为,运行时必然触发崩溃报错
  • 执行p = new int;后,p指向了堆区申请的动态内存块,这是唯一允许被delete合法回收的内存来源
  • 后续执行p = &a;时,p的指针值被直接覆盖为栈上局部变量a的地址,此时原p指向的堆内存彻底丢失访问路径(直接造成内存泄漏),p的指向已经从堆内存切换为栈内存
  • 最后执行delete p时,本质是尝试对栈内存地址执行堆内存回收操作,内存管理器校验到非法内存操作后直接终止程序抛出报错
对应修复逻辑
  • 严格遵守C++内存操作规则:只有通过new直接申请的堆内存指针,才能对应使用delete回收,栈变量、全局变量的地址绝对不能传入delete接口
  • 如果确实需要让p指向局部变量a,必须先回收p当前持有的堆内存,完成后绝对不能再对p执行delete操作,参考合法流程:
    p = new int;
    delete p; // 先释放原堆内存,避免内存泄漏
    p = &a; // 后续p仅指向栈变量,禁止再对p调用delete
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 13:06:02