一招教你区分malloc,calloc,realloc以及new的区别

目录

1.malloc

2.calloc 

3.realloc 

4.new


 

1.malloc

malloc在msdn中的描述为Allocates memory blocks.我们可以向该函数传入一个值n,然后malloc函数就会在堆区申请一个n个字节的空间。

void *malloc(size_t n) 

 

2.calloc 

calloc的描述为Allocates an array in memory with elements initialized to 0.根据描述我们可以看出calloc在申请空间时会将该空间初始为0。而它需要的参数为:n-要被分配的元素个数,m-元素的大小。

void *calloc(size_t n, size_t m) 

 

3.realloc 

而realloc的描述为Reallocate memory blocks.它的作用就是重新调整之前调用 malloccalloc 所分配的 ptr 所指向的内存块的大小。n为内存块的新的大小(可以调大也可以调小),以字节为单位。如果大小为 0,且 ptr 指向一个存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。

void *realloc(void *ptr, size_t n)

他们的返回值都为void*的指针指向分配的空间,使用时应注意要把void*强制转换为所需要的的类型,但如果分配失败则会返回NULL。

在使用完这些空间后,我们应及时用free释放掉这些空间,并将ptr赋值为NULL,以防止产生内存泄漏和野指针。

4.new

new是c++中的关键字,而以上这些是c语言中的库函数,使用时需要引用头文件。

new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通operator delete全局函数来释放空间。

如果用申请的是内置类型的空间,那么new和malloc,delete的free的功能类似,但是new申请空间失败会抛异常,而malloc申请失败会返回NULL。

new与malloc最大的区别是在申请自定义类型的空间,new在申请完空间后会自动调用自定义类型的 构造函数,而delete会自动调用其 析构函数。
new也可对定义的空间进行初始化,如new int(4)就会将该空间初始化为4。
在支持c++11的编译器中还可初始化自定义的数组。

如果是释放自定义类型的数组时未表明是数组就会报错,而释放内置类型的数组时虽然不会报错,但是不推荐使用,所以delete数组时最好写上[ ]防止报错。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值