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

在C++中,动态数组是通过 new 和 delete 操作符在堆(heap)上分配和释放内存来实现的。相比静态数组,动态数组的大小可以在程序运行时确定,更加灵活。
1. 动态数组的定义(使用 new)
要定义一个动态数组,使用 new 数据类型[大小] 的语法:
int* arr = new int[n]; // 创建一个长度为 n 的整型动态数组
说明:
new int[n] 在堆上分配能存储 n 个 int 类型数据的内存空间。返回值是一个指向该内存块首地址的指针(即 int* 类型)。n 可以是变量,也就是说数组大小可以是运行时决定的。
示例:
立即学习“C++免费学习笔记(深入)”;
#include using namespace std;int main() {int size;cout <> size;
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[]:
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 std::vector vec(size); // 自动管理内存,支持动态扩容
优点:
自动释放内存,无需手动 delete。支持范围检查(at 方法)。可变长度,功能丰富(push_back、size 等)。更安全,不易出错。
基本上就这些。掌握 new 和 delete 是理解C++内存管理的基础,但实际开发中优先考虑 vector 等标准容器。不复杂但容易忽略的是:配对使用 new[]/delete[],别忘了释放。
以上就是c++++ 动态数组怎么定义 c++ new delete用法教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1487434.html
微信扫一扫
支付宝扫一扫