0

0

C++数组内存释放 delete[]正确使用

P粉602998670

P粉602998670

发布时间:2025-09-11 10:53:01

|

958人浏览过

|

来源于php中文网

原创

使用new[]分配的数组必须用delete[]释放,否则会导致未定义行为。正确配对可确保析构函数被调用并防止内存泄漏。

c++数组内存释放 delete[]正确使用

在C++中,使用

new[]
动态分配数组内存时,必须用
delete[]
来释放,否则会导致未定义行为,常见问题包括内存泄漏、程序崩溃或运行异常。

正确配对 new[] 和 delete[]

当你用

new[]
申请一段数组内存,必须用
delete[]
释放,不能使用普通的
delete

  • new int[10]
    → 必须用
    delete[]
  • new char[256]
    → 必须用
    delete[]
  • new MyClass[5]
    → 必须用
    delete[]

错误示例:

int* arr = new int[10];
delete arr;  // 错误!应使用 delete[]

这可能导致析构函数未被正确调用(对类类型),或内存管理器混乱,最终引发崩溃。

立即学习C++免费学习笔记(深入)”;

delete[] 的作用机制

delete[]
不仅释放内存,还会对数组中每一个元素调用析构函数(如果是类对象),然后归还整块内存。

例如:

class MyClass {
public:
    MyClass() { cout << "构造\n"; }
    ~MyClass() { cout << "析构\n"; }
};

MyClass* objs = new MyClass[3]; // 构造3次 delete[] objs; // 析构3次,释放内存

如果误用

delete
,可能只调用第一个元素的析构函数,其余对象资源未清理,造成资源泄漏。

问小白
问小白

免费使用DeepSeek满血版

下载

基本类型也要用 delete[]

即使数组元素是

int
char
等基本类型,也推荐使用
delete[]
。虽然对内置类型不调用析构函数,但C++标准要求配对使用,确保可移植性和一致性。

正确写法:

int* p = new int[100];
// ... 使用
delete[] p;  // 正确释放
p = nullptr; // 避免悬空指针

避免重复释放和空指针检查

同一块内存不能多次释放,否则导致未定义行为。

释放后建议将指针设为

nullptr
,再次
delete[]
空指针是安全的:

delete[] p;
p = nullptr;
delete[] p; // 安全,无操作

但不要重复释放非空指针。

基本上就这些。只要记住:new[] 配 delete[],new 配 delete,就能避免大多数问题。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

542

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

空指针异常处理
空指针异常处理

本专题整合了空指针异常解决方法,阅读专题下面的文章了解更多详细内容。

22

2025.11.16

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

269

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

210

2023.12.29

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

4

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

55

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.3万人学习

Excel 教程
Excel 教程

共162课时 | 12.7万人学习

MongoDB 教程
MongoDB 教程

共17课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号