C++精进之路3:new/delete与malloc/free的区别

首先说一下内存异常的一些常用概念:

内存泄露:malloc申请堆内存时,没有进行free释放内存,导致内存被占用;

内存溢出:因为内存泄露太多,导致内存被用完,就会出现内存溢出的报错,在windows中弹窗内存溢出是挺常见的;

野指针:内存free释放后,没有赋值null,指针仍然指向未申请使用的内存地址,访问野指针会导致无法预期的数据修改,可能导致程序崩溃;

内存踩踏:访问越界导致腹泻了非目标地址内的数据,常见于循环访问数组时设置循环次数有误,导致访问越界,写入数据将非数组内的变量也覆盖掉了;

C++的新空间开辟

程序中需使用堆内存时,必须要申请空间,方法有malloc或者new;申请空间后释放内存,可以用free或者delete。

他们的相同点是malloc/free和new/delete都是用来申请和释放堆空间的;

他们的不同点:

1、malloc/free是库函数,new/delete是表达式

2、malloc开辟空间不会初始化,new表达式开辟空间会直接将变量初始化

3、返回值不同,malloc返回的是指针,new是表达值,直接操作对象,没有返回值

4、malloc/free不能用来操作对象,它们是没有析构函数的;只有new/delete可以操作对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值