C++在堆区创建数组

本文详细讲解了C++中new关键字在堆区申请内存的基本用法,包括单个变量、数组的申请、初始化和释放,以及注意事项。还介绍了如何正确处理指针和数组的生命周期。

new申请数据空间

c++中的new在堆区申请空间的时候的格式是:

int * p = new int(10);  //该代码的意思就是说在堆区申请的内存赋值为10
//int 后面括号里面写的就是你的初始值

上面代码有一点需要注意的是,10这个数据在堆区,但是接收它的指针在栈区这得搞清楚

上述代码int后面写括号里面是它的初始化的值,但你要是不写任何值的话也可以,系统自动给你初始化为0

int main()
{
	int* p = new int();

	cout << *p << endl;
	system("pause");
	return 0;
}
输出结果:0

new  去申请数组

int main()
{
	int* p = new int[2];
	for (int i = 0; i < 2; i++)
	{
		cout << p[i] << endl;
	}
	
	system("pause");
	return 0;
}

输出结果:
-842150451
-842150451

数组的申请和数据大同小异,唯一值得注意的一点就是数组必须初始化也就是:

int* p = new int[2];

得把上行代码改为:

int* p = new int[2]();       切记 数组的申请括号里面不能写值
                             切记 数组的申请括号里面不能写值
   2是数组元素个数            切记 数组的申请括号里面不能写值

这样数组结构都是0了

然后就是new完之后的空间释放了

很简单:

//释放数据的话
delete p;        //p是接收申请空间的指针
//释放数组的话
delete[] p;        //p是接收申请空间的指针
                   //释放数组必须加上[]

以梦为马   不负韶华 !!!加油少年!!!

C++中,在创建二维数组有以下几种常见方法: ### 连续空间法 这种方法会在上分配一块连续的内存空间来存储二维数组。示例代码如下: ```cpp #include <iostream> int main() { int size = 2; int(* arr1)[3] = new int[size][3]{ {1,2,3},{4,5,6} }; for (int i = 0; i < size; i++) { for (auto a : arr1[i]) { std::cout << a << "-"; } std::cout << std::endl; } delete []arr1; arr1 = nullptr; return 0; } ``` 这里`int(* arr1)[3]`定义了一个指向包含3个`int`元素的数组的指针,`new int[size][3]`在上分配了`size`行,每行3个元素的二维数组,并进行了初始化。使用完后,使用`delete []arr1`释放内存,并将指针置为`nullptr`,避免悬空指针[^1]。 ### 指针数组法 该方法先创建一个指针数组,每个指针再指向一个一维数组,从而模拟二维数组。示例如下: ```cpp #include <iostream> int main() { int width = 4, height = 3; int** arr2 = new int* [height] {0}; for (int i = 0; i < height; i++) { arr2[i] = new int[width] {1 * (i+1), 2 * (i + 1), 3 * (i + 1) }; } for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { std::cout << arr2[i][j] << " "; } std::cout << std::endl; } for (int i = 0; i < height; i++) delete[] arr2[i]; delete[] arr2; arr2 = nullptr; return 0; } ``` 首先`int** arr2 = new int* [height]`创建了一个包含`height`个指针的数组,然后通过循环为每个指针分配`width`个元素的一维数组,并进行初始化。释放内存时,需要先释放每个一维数组,再释放指针数组[^1]。 ### 使用`std::vector`创建二维数组 这种方法适用于每一行的列数都相等的二维数组的定义与初始化。示例代码如下: ```cpp #include <iostream> #include <vector> int main() { int m = 3, n = 4; std::vector<std::vector<int>> matrix(m, std::vector<int>(n, -1)); for (const auto& row : matrix) { for (int val : row) { std::cout << val << " "; } std::cout << std::endl; } return 0; } ``` `std::vector<std::vector<int>> matrix(m, std::vector<int>(n, -1))`创建了一个`m`行`n`列的二维数组,并将所有元素初始化为 -1。使用`std::vector`的好处是不需要手动管理内存,它会自动处理内存的分配和释放[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值