动态分配二维数组需先声明指向指针的指针,再为行分配内存,接着为每行分配列内存,最后按相反顺序释放内存以避免泄漏。

在C++中,二维数组的定义和使用是编程中的常见需求,尤其在处理矩阵、图像或表格数据时。除了静态定义固定大小的二维数组外,动态分配二维数组更为灵活,可以根据运行时输入确定数组大小。下面详细介绍C++中如何定义和动态分配二维数组。
静态二维数组的定义
最简单的二维数组定义方式是在编译时指定行数和列数:
int arr[3][4]; // 定义一个3行4列的整型数组
这种方式适用于大小已知且固定的情况。但无法在程序运行时改变数组尺寸。
使用指针动态分配二维数组
当需要在运行时确定数组大小时,应使用动态内存分配。以下是标准步骤:
立即学习“C++免费学习笔记(深入)”;
- 声明一个指向指针的指针:用于表示二维数组的行指针
- 为行分配内存:每行是一个指针,指向一维数组
- 为每列分配内存:为每一行分配具体的数据存储空间
int** arr;
int rows = 3, cols = 4;
<p>// 分配行指针
arr = new int*[rows];</p><p>// 为每一行分配列元素
for (int i = 0; i < rows; ++i) {
arr[i] = new int[cols];
}</p>此时,arr[i][j] 可以像普通二维数组一样访问元素。
释放动态二维数组内存
动态分配的内存必须手动释放,避免内存泄漏。释放顺序应与分配相反:
- 先释放每一行的内存
- 再释放行指针数组
for (int i = 0; i < rows; ++i) {
delete[] arr[i]; // 释放每行
}
delete[] arr; // 释放行指针
arr = nullptr; // 避免悬空指针
使用vector替代原生数组(推荐)
更安全、简洁的方式是使用 std::vector 模拟二维数组:
#include <vector> std::vector<std::vector<int>> matrix(rows, std::vector<int>(cols));
这种方式无需手动管理内存,支持动态扩容,且不易出错,是现代C++推荐做法。
基本上就这些。根据需求选择静态数组、动态指针或vector实现二维结构,关键是理解内存布局和资源管理原则。










