malloc函数和new关键字 C/C++

本文详细对比了C语言中的malloc/free与C++中的new/delete在内存管理上的区别,包括函数性质、参数需求、返回类型安全性、初始化能力、数组处理方式、异常处理及内存分配位置等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

malloc free

  malloc是c语言中动态开辟内存时常用的函数,malloc只能单纯地开辟内存,使用malloc后,还需要在使用完之后用free释放掉其所开辟的空间。其函数原型如下:

void* malloc(size_t   size)//void* 指向的是一个半开半闭的区间,即[ ),因此不安全

  C和C++中允许任意类型的指针转成void* ,而若想将void* 转成别的类型的指针需要强转。

new delete

  C++中动态开辟内存使用new关键字,而释放内存使用delete关键字。new不仅能开辟内存,而且还能够做初始化,例如:

int* p=new int(10);//类型+初始化列表
delete p;

int* p=new int[10];//开辟数组p[10]
delete[] p;

int* p=new int[10]();//只能进行零初始化
const int* p=new const int(20);//开辟常量内存

//重定位new
int a;
char* c=new(&a)char('a');//通过new后面的地址所对应的内存单元,拿到内存供外部使用
new和malloc的区别

1.new是关键字,malloc是一个函数;
2.new不需要确定开辟的大小,malloc需要传递开辟的大小;
3.new返回值类型安全,malloc返回值类型不安全;
4.new还可以做初始化,malloc只能开辟内存;
5.new是以 new[ ]的形式开辟数组,而malloc开辟数组以开辟总大小的方式处理;
6.new开辟内存失败,直接抛出异常,而malloc开辟失败返回NULL;
7.new开辟的内存位置是自由存储区域,malloc在堆上开辟;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值