(zz)浅谈malloc与calloc、realloc、new 的区别

相关函数原型:

1. Malloc

作 用:Malloc用于动态申请存储空间,它不是关键字,而是一个申请内存的函数

用 法:Malloc 返回一块内存地址的指针,否则会返回空指针null,这里要注意的是,当内存不再使用的时候,用free()函数进行对内存的释放。

2.calloc

作 用:calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。

例 子:

3.realloc

作 用:重新分配内存空间。

例 子:

4.总结:

malloc: 动态分配size字节空间,返回它的指针。(此函数不能初始化内存空间)
calloc:动态分配n个连续的size字节空间,返回第一个指针。它有两个参数,分别为参数的数目,和每个参数的大小,那么这两个参数的乘积就是这个分配空间的大小。(此函数可以初始化内存空间)
realloc:将指针指向的内存空间扩展成n个,把它放在最后解释因为偶不建议使用,确实要用也要考虑多种情况。
free:释放上述两函数分配的空间;

 

malloc与new :

1 、new 建立的是一个对象,malloc 分配的是一块内存。
2、malloc申请的是heap区的内存空间,返回的是指针。new 建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间。(注意用delete释放空间)。
3、malloc/free是C/C++中的方法(函数),new/delete是C++中的操作符。
4、使用free之前要判断,使其free的指针是!NULL的,使用delete则无须判断。
5、free掉的内存是该指针指向的一段内存空间,里面应该是空的。而delete掉的内存是里面确实存有数据或者对象的。

 

最后要注意的是malloc和free 、new和delete成对使用,以免不必要的麻烦。

malloc、callocreallocnew都是C++和C语言中动态分配内存时经常用到的函数。它们之间的区别如下: 1. malloc malloc是C语言中最基本的动态内存分配函数。它需要传入分配内存空间的大小,并返回分配空间的首地址。malloc分配内存时,只是在内存空间中找到大小合适的连续空闲区域,然后将该内存块标记为已用状态。使用完毕后,需要手动调用free()函数来释放所分配的内存空间,否则将会造成内存泄漏。 2. calloc callocmalloc类似,它也是用来分配内存的。calloc需要传入分配内存空间的大小和空间个数,并返回分配空间的首地址。calloc分配出来的内存空间是没有被初始化的,即内存中的每一位都被初始化为0。使用完毕后,同样需要调用free()函数来释放空间。 3. realloc realloc是C/C++中用来重新调整内存大小的函数。它需要传入要调整内存的地址和要调整的大小。如果新的内存大小比原来的内存大小小,则realloc将原有内存块缩小为新的大小,多余的空间将释放;如果新的内存大小比原来的内存大小大,则需要重新分配一块内存,将原有内存块的数据拷贝到新的内存块中,并释放原有内存块。使用完毕后,仍需要调用free()函数来释放内存。 4. new new是C++中的动态内存分配方式,它是一个运算符,不是一个函数。new可以分配任意类型的内存空间,包括基本类型、类、结构体等。使用new分配内存后,不需要手动释放内存,因为C++中有自动的内存回收机制。如果使用new分配的空间已经不需要使用,C++会自动调用deletedelete[]来释放内存。 总的来说,malloc、callocreallocnew都是动态内存分配的方式,它们的使用场景不同,需要根据具体情况选择使用。在使用完毕后,都需要手动或自动释放内存,以避免内存泄漏的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值