2026-10-30 10:03:11
在C++中,使用new关键字在堆上创建动态数组的完整方法如下:
一、一维动态数组的创建与使用基本语法
data_type* array = new data_type[size];data_type:数组元素类型(如int、double等)。
size:数组长度(可为变量或表达式,运行时确定)。
示例:int n = 10;int* arr = new int[n]; // 创建长度为10的int数组
访问与修改元素
通过下标访问,索引从0开始:arr[0] = 100; // 修改第一个元素arr[1] = 200; // 修改第二个元素
初始化动态数组
C++11起支持初始化列表:double* darr = new double[3]{1.1, 2.2, 3.3}; // 初始化前3个元素
初始化为0:使用空括号():int* zeros = new int[5](); // 所有元素初始化为0
释放内存
必须使用delete[]释放new[]分配的数组,避免内存泄漏:delete[] arr;arr = nullptr; // 避免悬空指针
注意:误用delete(非delete[])会导致未定义行为。
创建步骤
第一步:创建指针数组(行指针):int rows = 3, cols = 4;int matrix = new int*[rows]; // 创建3行的指针数组
第二步:为每行分配空间:for (int i = 0; i < rows; ++i) { matrix[i] = new int[cols]; // 每行分配4列}
访问元素
通过双重下标访问:matrix[1][2] = 5; // 修改第2行第3列的元素
释放内存
反向操作:先释放每行,再释放指针数组:for (int i = 0; i < rows; ++i) { delete[] matrix[i]; // 释放每行}delete[] matrix; // 释放指针数组matrix = nullptr; // 避免悬空指针
内存管理责任
动态数组需手动释放,否则会导致内存泄漏。
现代C++推荐使用std::vector或std::array(自动管理内存,更安全)。
异常安全
若分配过程中抛出异常,可能导致内存泄漏。建议使用智能指针(如std::unique_ptr)或容器类。
性能考量
动态数组分配可能比栈数组慢,且频繁分配/释放易产生内存碎片。
std::vector(动态大小)
#include <vector>std::vector<int> vec(10); // 创建10个元素的vector,默认初始化为0vec.push_back(100); // 动态添加元素std::array(固定大小)
#include <array>std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 编译时确定大小总结:new适用于需要手动控制内存的场景,但需严格管理释放逻辑。优先使用标准库容器可提升代码安全性和可维护性。