新闻中心

c++ 动态数组怎么定义 c++ new delete用法教程

2025-12-02
浏览次数:
返回列表
C++中动态数组通过new在堆上分配内存,delete[]释放,大小可在运行时确定;需配对使用new[]与delete[],避免内存泄漏和未定义行为;推荐优先使用std::vector实现自动内存管理。

c++ 动态数组怎么定义 c++ new delete用法教程

在C++中,动态数组是通过 newdelete 操作符在堆(heap)上分配和释放内存来实现的。相比静态数组,动态数组的大小可以在程序运行时确定,更加灵活。

1. 动态数组的定义(使用 new)

要定义一个动态数组,使用 new 数据类型[大小] 的语法:

int* arr = new int[n];  // 创建一个长度为 n 的整型动态数组

说明:

  • new int[n] 在堆上分配能存储 n 个 int 类型数据的内存空间。
  • 返回值是一个指向该内存块首地址的指针(即 int* 类型)。
  • n 可以是变量,也就是说数组大小可以是运行时决定的。

示例:

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

#include <iostream>
using namespace std;
<p>int main() {
int size;
cout << "输入数组大小: ";
cin >> size;</p><pre class='brush:php;toolbar:false;'>int* arr = new int[size];  // 动态分配数组

// 赋值
for (int i = 0; i < size; ++i) {
    arr[i] = i * 2;
}

// 输出
for (int i = 0; i < size; ++i) {
    cout << arr[i] << " ";
}
cout << endl;

delete[] arr;  // 释放内存
return 0;

}

2. 释放动态数组(使用 delete[])

使用完动态数组后,必须手动释放内存,避免内存泄漏。释放动态数组要用 delete[]

SCISPACE SCISPACE

AI论文研究助手,探索和解释论文的平台

SCISPACE 65 查看详情 SCISPACE
delete[] arr;  // 正确:释放整个数组

注意:

  • 如果是单个对象用 new 分配,用 delete 释放;
  • 如果是数组用 new[] 分配,必须用 delete[] 释放。
  • 忘记释放会导致内存泄漏。
  • 重复释放或访问已释放的内存会导致未定义行为。

3. new 和 delete 的基本用法对比

分配单个变量:

int* p = new int;     // 分配一个int
*p = 10;
delete p;             // 释放

分配数组:

double* darr = new double[100];  // 分配100个double
// ... 使用 ...
delete[] darr;                   // 必须加 []

4. 常见错误与注意事项

  • 忘记 delete[]:导致内存泄漏,程序运行越久占用内存越多。
  • 使用 delete 而不是 delete[]:对数组使用 delete 会引发未定义行为。
  • 访问越界:动态数组不会检查边界,越界访问可能破坏内存。
  • 重复释放:释放后不要再调用 delete[],也不要再次使用指针。
  • 释放后使用(悬空指针):释放后建议将指针设为 nullptr:
delete[] arr;
arr = nullptr;  // 避免悬空指针

5. 更推荐的方式:使用 std::vector

虽然 new/delete 是基础技能,但在现代C++中,更推荐使用 std::vector 来代替动态数组:

#include <vector>
std::vector<int> vec(size);  // 自动管理内存,支持动态扩容

优点:

  • 自动释放内存,无需手动 delete。
  • 支持范围检查(at 方法)。
  • 可变长度,功能丰富(push_back、size 等)。
  • 更安全,不易出错。

基本上就这些。掌握 new 和 delete 是理解C++内存管理的基础,但实际开发中优先考虑 vector 等标准容器。不复杂但容易忽略的是:配对使用 new[]/delete[],别忘了释放。

以上就是c++++ 动态数组怎么定义 c++ new delete用法教程的详细内容,更多请关注其它相关文章!


# 推荐使用  # 网站建设淘宝好评  # 南星建设工程招聘网站  # 辽源seo营销系统  # 自贡市建设网站  # 产品推广营销案例分享  # 贴吧营销推广员招聘  # seo1o1  # 江门网站建设地址  # 网站建设需求调研方案  # 正规免费网站建设  # 相关文章  # ai  # 设为  # 但在  # 数独  # 内存管理  # 是一个  # 的是  # 如何实现  # 如何用  # stream  # ios  # c++ 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  必由学官网快捷入口 必由学网页版在线学习平台  漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  谷歌推RCS信息存档功能:公司可监控员工私密信息!  在J*a项目里如何构建对象之间的契约_接口约束的实际落地  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  J*aScript Promise链中如何正确终止后续.then执行并处理错误  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  优化Log4j2控制台输出性能:解决异步日志瓶颈  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  J*a里如何使用forEach遍历Map_Map遍历方法说明  如何使 Jest 模拟函数默认抛出错误以提高测试效率  J*aScript类型检查_j*ascript代码规范  铃兰之剑为这和平的世界希里技能组及加点推荐  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  J*aScript动态修改指定div内所有a标签样式指南  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  深入理解Google Cloud Datastore查询:祖先路径与数据一致性  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  马斯克:Optimus 人形机器人复数形式为 Optimi  Angular Material 垂直步进器:实现底部到顶部排序的教程  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  J*aScript map 迭代中检测空数组元素的有效方法  Typer应用中灵活处理命令行参数的令牌化与解析  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  J*aScript:在map操作中高效处理空数组  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  小米汽车11月交付量突破40000台!雷军:将继续努力  Win11网速慢怎么解决 Win11网络设置优化解除限速  Django模型中自动计算可用余额的实现方法  理解J*aScript Promise的微任务队列与执行顺序  必由学官方登录入口 必由学教师学生账号快速访问  Python:递归比较文件夹内容并找出特定类型文件的差异  微博网页版官方账号登录 微博网页版内容浏览使用指南  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  Win10双系统截图高效法 截屏快捷键速记【技巧】  深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量  qq游戏大厅官方下载_qq游戏免费下载安装入口 

搜索