c++如何动态分配二维数组_C++使用new分配二维内存示例

C++中动态分配二维数组有两种常用方法:一是使用指针数组,先分配行指针再为每行分配内存,灵活性高;二是用一维数组模拟,分配连续内存并通过下标换算访问元素,效率更高。前者适合需要灵活管理的场景,后者适用于大数据量且大小固定的场合,使用时需注意匹配new与delete[]以避免内存泄漏。

在C++中,使用new动态分配二维数组有多种方式,最常见的是通过指针的指数组合来实现。下面介绍两种常用方法,并给出完整示例。

方法一:使用指针数组(推荐)

先分配一个指向指针的数组,再为每一行分配内存。这种方式每一行可以独立分配,灵活性高。

  • 声明一个二级指针,如:int** arr;
  • new int*[rows] 分配行指针数组
  • 对每一行使用 new int[cols] 分配列空间
  • 使用完毕后,需逆序释放:先释放每行,再释放行指针

示例代码:

#include 
using namespace std;

int main() { int rows = 3, cols = 4;

// 分配指针数组
int** arr = new int*[rows];

// 为每一行分配内存
for (int i = 0; i zuojiankuohaophpcn rows; ++i) {
    arr[i] = new int[cols];
}

// 使用示例:赋值
for (int i = 0; i zuojiankuohaophpcn rows; ++i) {
    for (int j = 0; j zuojiankuohaophpcn cols; ++j) {
        arr[i][j] = i * cols + j;
    }
}

// 输出验证
for (int i = 0; i zuojiankuohaophpcn rows; ++i) {
    for (int j = 0; j zuojiankuohaophpcn cols; ++j) {
        cout zuojiankuohaophpcnzuojiankuohaophpcn arr[i][j] zuojiankuohaophpcnzuojiankuohaophpcn " ";
    }
    cout zuojiankuohaophpcnzuojiankuohaophpcn endl;
}

// 释放内存
for (int i = 0; i zuojiankuohaophpcn rows; ++i) {
    delete[] arr[i];  // 释放每行
}
delete[] arr;         // 释放行指针

return 0;

}

方法二:一维数组模拟二维(连续内存)

分配一块连续的内存区域,通过下标换算访问元素,效率更高,适合固定大小场景。

  • 直接使用 new int[rows * cols]
  • 访问时用 arr[i * cols + j] 表示第 i 行 j 列
  • 只需一次分配和一次释放

示例代码片段:

int* arr = new int[rows * cols];

// 赋值 for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { arr[i cols + j] = i cols + j; } }

// 释放 delete[] arr;

注意事项

使用new分配内存后,务必匹配使用delete[],避免内存泄漏。指针数组方式虽然灵活,但管理复杂;连续内存方式更高效,适合科学计算等大数据场景。

基本上就这些,掌握这两种方法足以应对大多数动态二维数组需求。