CPP学习之手把手教你动态分配内存C与CPP

C++动态分配内存

分配内存这个事上,在做项目的时候确实很重要,不是不会用,就怕忘记操作,就会造成一些bug,这东西还是得多写代码才行;
程序中一般会把内存分到两部分里面,一个是堆,可用于分配动态内存,不会自动释放的;另一个是栈,函数内部申明变量都将占用栈内存。

分配方法

new和delete

//用法
int *a = new int;
int *arr = new int[len]

检测是否分配成功

int *p = NULL;//内存地址初始化
if(!(int *p=new int)){
	cout<<"error";
	exit(1);
}

释放内存

delete a;
delete []arr;
arr = NULL;//内存块释放后最好指向NULL,避免变为嘢指针;

二维数组动态分配

int **arr;//x*y
arr = new int *[x];
for(int i=0;i<x;i++){
	arr[i]=new int arr[y];
}

//delete
for(int i=0;i<x;i++){
	delete []arr[i];
}
delete []arr;
arr = NULL;

对象的二维动态分配

直接就是delete调用析构函数

malloc 与free

int *p = (int*)malloc(sizeof(int)*len);
for(int i=0;i<len;i++) cin>>*p;

free(p);

总结

  • malloc和free是标准库函数;new和delete是C++关键字;
  • malloc和free需要手动计算大小,返回值为void*,;new和delete自动计算类型大小,返回值为对应类型指针;
  • malloc和free对类使用只会开辟空间,不会对类进行初始化,free也不会调用析构函数;new和delete自动开辟内存和创建对象,delete自动调用析构函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值