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

C++中非指针数组无法使用delete释放的正确内存释放方法

C++ 栈数组的内存管理规则

两种数组声明的内存分配逻辑存在本质区别,对应内存释放规则完全不同:

  • 堆动态数组:int* test = new int[50];的写法是在自由存储区(堆)申请内存,生命周期由开发者手动控制,必须配对使用delete[] test;释放,否则会造成内存泄漏。
  • 栈固定长度数组:int test[50];的写法是在程序栈空间申请内存,生命周期由作用域规则自动管理,不需要编写任何手动释放的代码。当代码执行离开该数组定义所在的作用域(例如数组定义在函数内时函数返回、定义在局部代码块内时代码块执行完毕),其占用的栈空间会被系统自动回收。

警告:对栈上分配的变量、数组使用delete或delete[]属于未定义行为,会触发程序崩溃、内存损坏等不可预期的错误。

代码中用到的dist4是随机数生成逻辑,仅负责给数组元素赋值,和数组本身的内存管理规则无关,对应实现如下:

random_device dev;
mt19937 rng(dev());
uniform_int_distribution<mt19937::result_type> dist4(1,4); // 分布范围为[1,4]

只有当你需要手动控制数组生命周期(比如数组需要在定义它的作用域结束后继续被访问)时,才需要使用new[]/delete[]配对的堆分配方式;如果数组仅在当前作用域内使用,直接使用栈声明的写法即可,无需额外处理内存释放。

内容的提问来源于stack exchange,提问作者Fabrice Schöneberger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:15:35