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

动态数组内存释放疑问:delete替代delete[]可行吗?释放后能否访问?

问题解答

1. 使用delete而非delete[]释放new[]创建的数组能否正确释放?

这属于未定义行为,具体表现分两种场景:

  • 针对int、char这类内置数据类型:表面上内存可能会被释放,但这只是编译器的巧合行为,C++标准并未保证该操作的正确性,不同编译器或运行环境下可能出现内存泄漏、程序崩溃等问题。
  • 针对带自定义析构函数的类对象数组:delete只会调用数组第一个元素的析构函数,其余元素的析构函数不会被执行,会导致资源泄漏;同时内存释放的流程也不符合数组分配的规则,极易引发内存错误。

2. delete[] ptr1后,通过同地址的ptr2访问原数组是否可行?

绝对不行。执行delete[]后,该内存区域已被操作系统回收,ptr2成为悬垂指针。此时访问ptr2指向的内容属于未定义行为,读取到垃圾值是典型表现——内存可能已被重新分配给其他变量使用,原数组的数据早已被覆盖或销毁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:42:01