new , delete常见用法和与malloc,free比较
2024-09-02 03:28:38
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申请的内存空间进行重新分配,通常是为了改变原来申请的内存空间大小。
最新文章
- Redis Cluster 介绍与使用
- PLSQL配置新的oracle实例
- Altium Designer自动更新——解决方法
- C++多线程2
- android Timer使用方法
- VS2013 EMMET插件学习
- Android 中的Force Close
- JavaScript学习笔记(十二) 回调模式(Callback Pattern)
- redhat enterprixe 5.0 NFS服务配置与管理
- mysql 中 SQL_CALC_FOUND_ROWS 功能
- man rsync翻译(rsync命令中文手册)
- 以太坊系列之十六: 使用golang与智能合约进行交互
- c#使用GDI+简单绘图
- Python-数据类型之字典
- javascript websocket 心跳检测机制介绍
- 微信支付退款(PHP后端)
- Meshgrid函数的基本用法(转载)
- django-template-forloop
- 17.async 函数
- opencv之读取pts文件
热门文章
- HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8
- MongoDB 比较适用哪些业务场景
- MySQL 8.0.15 配置 MGR单主多从
- wangEditor实现ctrl+v粘贴word图片并上传
- UCOSIII(一)
- tarjan求强连通分量(模板)
- Ubuntu14.04 系统复制迁移到新的机器上
- SpringBoot2.0 Actuator 监控参数说明
- windows下安装node.js及环境配置、部署项目
- vagrant系列三:vagrant搭建的php7环境