「C++ 内存管理篇 04」动态二维数组

目录

[一. 使用calloc/free开辟和释放二维数组](#一. 使用calloc/free开辟和释放二维数组)

[二、 使用new/delete开辟和释放二维数组](#二、 使用new/delete开辟和释放二维数组)



一. 使用calloc/free开辟和释放二维数组

让一个二级指针变量存放动态开辟的一级指针数组的起始地址,然后让这些一级指针指向动态开辟的基本类型的数组:

cpp 复制代码
// 开辟一个大小为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列的二维数组:

cpp 复制代码
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开辟和释放二维数组

一样的步骤:让一个二级指针变量存放动态开辟的一级指针数组的起始地址,然后让这些一级指针指向动态开辟的基本类型的数组:

cpp 复制代码
// 开辟一个大小为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列的二维数组:

cpp 复制代码
//开辟一个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-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

相关推荐
kiracrimson7 分钟前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
Logic10111 分钟前
C语言/数据结构位运算题解:异或XOR找出星球探险中的“独特能量石“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
垆边人似月.27 分钟前
华为机考题:最小代价爬楼梯
c语言·c++
可涵不会debug35 分钟前
C++ std::bind 实战教程:线程池、回调场景全覆盖
linux·开发语言·c++
垆边人似月.1 小时前
华为机考题:二叉树的最大路径和
c语言·c++
2601_962218612 小时前
深入理解C++中的thread_local线程局部变量的应用
开发语言·c++
无名猿2 小时前
C++ lambda 捕获列表详解:值捕获、引用捕获、初始化捕获与悬垂引用
c++·现代c++·语法基础·踩坑记录
hnjzsyjyj3 小时前
洛谷 P1339:[USACO09OCT] Heat Wave G ← Bellman-Ford 算法
数据结构·bellman-ford 算法
lengxuenong3 小时前
枚举例题分析
c++·算法·青少年编程
繁华的地方不一定留下你的脚印3 小时前
C++线程如何安全停止与唤醒:std::jthread、stop_token与condition_variable
开发语言·c++