目录
一. 使用calloc/free开辟和释放二维数组
二、 使用new/delete开辟和释放二维数组
一. 使用calloc/free开辟和释放二维数组
让一个二级指针变量存放动态开辟的一级指针数组的起始地址,然后让这些一级指针指向动态开辟的基本类型的数组:
// 开辟一个大小为3的一级指针动态数组 int** brr = (int**)calloc(sizeof(int*), 3); // 让数组中的一级指针动态指向动态开辟的整型数组 brr[0] = (int*)calloc(sizeof(int), 3); brr[1] = (int*)calloc(sizeof(int), 5); brr[2] = NULL; // 赋值 brr[0][0] = 1; brr[0][1] = 2; brr[0][2] = 3; brr[1][0] = 11; brr[1][1] = 12; brr[1][2] = 13; brr[1][3] = 14; brr[1][4] = 15; cout << brr[0][2] << endl; cout << brr[1][4] << endl; brr[1][4] = 26; cout << brr[1][4] << endl; for (int i = 0; i < 3; i++) free( brr[i]); free(brr);
开辟一个n行m列的二维数组:
int main() { int n = 3, m = 4; // 先开一个大小为n的指针数组 int** arr = (int**)malloc(sizeof(int*) * n); //对每个一维数组开辟空间 for (int i = 0; i < n; i++) arr[i] = (int*)malloc(sizeof(int) * m); //释放 for (int i = 0; i < n; i++) free(arr[i]); free(arr); return 0; }
二、 使用new/delete开辟和释放二维数组
一样的步骤:让一个二级指针变量存放动态开辟的一级指针数组的起始地址,然后让这些一级指针指向动态开辟的基本类型的数组:
// 开辟一个大小为3的一级指针动态数组 int** arr = new int* [3]; arr[0] = new int[] {1, 2, 3}; // 让数组中的一级指针动态指向动态开辟的整型数组 arr[1] = new int[] {11, 12, 13, 14, 15 }; arr[2] = nullptr; //一定将未初始化的一级指针数组设为空指针,不然释放时会抛异常 cout << arr[0][2] << endl; cout << arr[1][4] << endl; arr[1][4] = 26; cout << arr[1][4] << endl; for (int i = 0; i < 3; i++) delete[] arr[i]; delete[] arr;
开辟一个n行m列的二维数组:
//开辟一个n行m列的二维数组 int n = 3, m = 4; int** a = new int* [n];// 先开一个大小为n的指针数组 for (int i = 0; i < n; i++) a[i] = new int[m];// 再将每个指针指向一个动态数组 cout << a[0][0] << endl; //局部变量不会初始化为0 for (int i = 0; i < n; i++) delete[] a[i]; delete[] a;
------------------------END-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。