new/delete是C++的运算符。malloc与free是C++/C语言的标准库函数,new/delete只能在C++中使用,malloc与free在C与C++中都能够使用,它们都可用于申请动态内存和释放内存。
下面说说它们的用法与不同之处:
1、
new/delete
new 类型 : int *pi=new int; //分配一个int大小的内存空间,并用指针pi指向该内存,返回值为int*;相当于
int *p=(int*)malloc(sizeof(int));
new 对应 delete 用法:delete pi;
malloc 对应 free 用法:free(pi);
  new 类型[]:   int *pi=new int[100];//分配100个int大小的内存空间,并用指针pi指向该内存,返回值为int*;相当于int *p=(int*)malloc(100*sizeof(int));
new 对应 delete 用法 :delete []pi;
                       malloc 对应 free 用法: free(pi);
  注意:在delete之后,重设指针的值。
执行完该语句后,p变成了不确定的指针,在很多机器上,尽管p值没有明确定义,但仍然存放了它之前所指对象的地址,
然后p所指向的内存已经被释放了,所以p不再有效。此时,该指针变成了悬垂指针(悬垂 指针指向曾经存放对象的内存,
但该对象已经不存在了)。悬垂指针往往导致程序错误,而且很难检测出来。一旦删除了指针所指的对象,立即将指针置
为0,这样就非常清楚的指明指针不再指向任何对象。(零值指针:int *ip=0;)
如:
 int *pi=new int;
if(!pi==NULL)
{
//分配失败
//异常处理
}
delete pi;
pi=NULL;

特别注意:new与delete搭配,malloc与free搭配,千万不要混用。

拓展:realloc

函数原型:void *realloc(void * p, unsigned int size);//   p指向原来分配的内存空间,size表示重新分配的内存空间大小。

作用:对malloc申请的内存空间进行重新分配,通常是为了改变原来申请的内存空间大小。









 

最新文章

  1. Redis Cluster 介绍与使用
  2. PLSQL配置新的oracle实例
  3. Altium Designer自动更新——解决方法
  4. C++多线程2
  5. android Timer使用方法
  6. VS2013 EMMET插件学习
  7. Android 中的Force Close
  8. JavaScript学习笔记(十二) 回调模式(Callback Pattern)
  9. redhat enterprixe 5.0 NFS服务配置与管理
  10. mysql 中 SQL_CALC_FOUND_ROWS 功能
  11. man rsync翻译(rsync命令中文手册)
  12. 以太坊系列之十六: 使用golang与智能合约进行交互
  13. c#使用GDI+简单绘图
  14. Python-数据类型之字典
  15. javascript websocket 心跳检测机制介绍
  16. 微信支付退款(PHP后端)
  17. Meshgrid函数的基本用法(转载)
  18. django-template-forloop
  19. 17.async 函数
  20. opencv之读取pts文件

热门文章

  1. HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8
  2. MongoDB 比较适用哪些业务场景
  3. MySQL 8.0.15 配置 MGR单主多从
  4. wangEditor实现ctrl+v粘贴word图片并上传
  5. UCOSIII(一)
  6. tarjan求强连通分量(模板)
  7. Ubuntu14.04 系统复制迁移到新的机器上
  8. SpringBoot2.0 Actuator 监控参数说明
  9. windows下安装node.js及环境配置、部署项目
  10. vagrant系列三:vagrant搭建的php7环境