malloc和new的区别

From:http://zhangyongbluesky.blog.163.com/blog/static/18319416201192923042980/

昨天帮一个老乡调试了一段代码,刚开始的时候问我关于malloc和new的区别以及使用malloc申请空间后的释放问题,好久没有处理过这方面的问题了,特在此总结一下:

1、malloc
 c和c++,都有,申请空间后必须手动释放,但是在申请类的空间的时候,不会自动调用构造函数。

2、new
 c++专有,申请空间后可以自动进行空间回收,而且申请类的空间的时候,可以自动调用构造函数。

3、free(与malloc对应)和delete(与new对应)
通过free释放空间的时候不会自动调用类的析构函数,但是delete会自动调用类的析构函数。

4.只要是内存模型相同,指向已经申请空间的数据的引用类型数据也是可以释放所申请的空间的。

测试代码:




在free(test)之前断点提示,内存分配如下图所示:



在free(test)之后断点提示,内存分配如下图所示:


 
 
  
由前后的调试结果可知:


1.同类型的引用类型数据也可以释放其他指针所申请的空间。(其实不同类型的引用类型数据也可以释放其他指针所申请的空间)。如下图所示:



代码区别:void * test=(void *)a;


 







ps1:
当使用malloc申请多个内存地址,比如上面的代码就是2个机构体的内存地址空间,此时当问需要使用数组方式。
 
ps2:
野指针的问题,我们通过断点调试发现,当申请的内存空间被释放后,但是指针依然会指向原来所指的位置,这样会给以后造成负面影响,比如拿原来的指针进行了误操作,为了避免此类问题 ,我们需要在空间被释放后,对指针赋NUll值,即:
test=NUll;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值