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

使用delete释放内存时出现运行时错误是什么原因

问题原因

运行时错误由new/delete配对规则违反导致,属于典型的C++堆内存操作未定义行为:

  • 构造函数中通过new int[3]申请的是连续数组类型的堆内存,按照C++标准要求,这类内存必须使用数组专用的释放操作符delete[]回收
  • 当前析构函数使用的是普通delete操作符,仅能回收单个非数组对象的堆内存,用它释放数组内存会破坏堆管理器的内部结构,直接触发运行时崩溃。
修复方案

只需要将析构函数中的delete i修改为delete[] i即可,修正后完整代码如下:

#include <stdio.h>

struct A {
  int* i;
  A() { i = new int[3]; }
 ~A() { delete[] i; }
};

int main() {
  A t;
}
规则说明

C++内存管理的配对要求是严格的,不存在兼容混用的情况:

  • 单个对象分配:new 类型 必须配对 delete 指针
  • 数组对象分配:new 类型[长度] 必须配对 delete[] 指针
  • 二者混用会触发未定义行为,可能表现为崩溃、内存泄漏、随机数据损坏,不存在“偶尔能跑就没问题”的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:24:21