C++中用new 动态分配内存

在C语言中使用malloc()函数申请堆内存,然后用free()释放这块内存。而C++提供了简便且功能较强的运算符new和delete来进行内存的分配和释放,以下简单介绍new操作符的用法

1.new与单个元素

(1)

int* p=new int;

new返回指向int类型的指针,并且没有对申请的空间进行初始化,此时p指向一个随机值

(2)

int* p=new int();

类型后面加空括号,系统默认初始化,例如此处申请到的空间被初始化为0,如果是char类型,将被初始化为NULL

(3)

int* p=new int(5);

括号里是自己提供的初值

释放内存:

delete p;
p=NULL;

切记,new申请的堆内存在用完后必须用delete释放,否则造成内存泄露

2.new与一维数组

创建的数组长度为5

(1)

int* p=new int[5];

new返回数组首地址,没有初始化

(2)

int* p=new int[5]();

默认初始化

!!new为数组申请内存时无法提供初值

int* p=new int[5](0);
int* p=new int[5](3);
//会造成语法错误

 释放内存:delete []p;

p=NULL;

3.new与二维数组

例如,我们要创建一个[row][col]的二维数组

(1)

int** q=new int*[row];
for(int i=0;i<row;i++){
q[i]=new int[col];
}

使用二级指针,先创建一个指向指针数组的指针变量,然后让指针数组的每个元素指向一个数组(也就是二维数组的每一行);

释放内存:须一级一级地释放,并且先释放数组的第row行,

if(q){
for(int i=0;i<row;i++){
delete []q[i];
delete []q;
cell=NULL;
}
}

注意:连续两次delete同一个指针会造成严重错误 ,

为什么?当程序员用new申请一块堆内存时,计算机就把对这块内存的使用权限交给程序员,并且不会让其他程序占用这块内存;当第一次delete就把这块内存还给了机器,如果再次delete就相当于拿机器的内存还给机器,可能破坏正在使用这块内存的程序中的数据。

(2)

char(*p)[3]=new char[5][3];

把char[3]看成一个数据类型,p是指向一个长度为5的char[3]类型的数组首地址的指针变量,

并且这里(*p)的括号是必须加的,因为[]的优先级高于*,如果不加,就是创建了一个长度为3的指针数组

释放内存:delete []p;

p=NULL;

如发现错误,请在评论区指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值