📜  c++ 分配和释放动态二维数组 - C++ (1)

📅  最后修改于: 2023-12-03 15:13:59.378000             🧑  作者: Mango

C++ 分配和释放动态二维数组

在C++中,可以使用动态二维数组来实现更灵活的内存管理。动态二维数组是由多个一维数组组成的数组,可以通过指针和动态内存分配来创建。

创建动态二维数组

动态二维数组的创建方式有多种,其中一种常见的方式是使用双重指针,先分配一维数组的空间,再为每个一维数组分配空间。

int **p = new int*[m]; // 分配空间
for(int i=0; i<m; i++){
    p[i] = new int[n]; // 分配每个一维数组的空间
}

这段代码会创建一个m x n的动态二维数组,其中p是指向指针的指针。首先p会指向一个长度为m的整型指针数组,然后再为每个指针分配一个长度为n的整型数组。

释放动态二维数组

动态二维数组的释放需要一层层地释放每个一维数组的空间,然后再释放指针数组的空间。释放的顺序要与分配时的顺序相反。

for(int i=0; i<m; i++){
    delete[] p[i]; // 释放每个一维数组的空间
}
delete[] p; // 释放指针数组的空间
示例代码
#include<iostream>
using namespace std;

int main(){
    int m = 3, n = 4;
    int **p = new int*[m]; // 分配空间
    for(int i=0; i<m; i++){
        p[i] = new int[n]; // 分配每个一维数组的空间
    }
    // 赋值
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            p[i][j] = i*n + j;
        }
    }
    // 输出
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            cout<<p[i][j]<<" ";
        }
        cout<<endl;
    }
    // 释放
    for(int i=0; i<m; i++){
        delete[] p[i]; // 释放每个一维数组的空间
    }
    delete[] p; // 释放指针数组的空间

    return 0;
}

输出结果为:

0 1 2 3
4 5 6 7
8 9 10 11