new , delete常见用法和与malloc,free比较
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申请的内存空间进行重新分配,通常是为了改变原来申请的内存空间大小。
new , delete常见用法和与malloc,free比较的更多相关文章
- C语言中malloc、free和new、delete的用法和区别
很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的.但是但是: 一部分人还是将:malloc当作系统所提供的或 ...
- 内存管理运算符new delete与内存管理函数malloc free的区别——已经他们对对象创建的过程。
(1)内存管理函数与内存管理运算符的区别 内存管理函数有内存分配函数,malloc calloc realloc 以及内存释放函数free. 内存管理运算符有new 和delete. 两种内存管理方式 ...
- JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)
一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...
- Java 枚举(enum) 的常见用法和开发规范
JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static final ...
- Supervisord常见用法和介绍
Supervisord是用Python实现的一款非常实用的进程管理工具.supervisord会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启.关闭.重启等操作,而且它管理的进程 ...
- 转:sudo 的常见用法和参数选项
原文链接:http://wiki.ubuntu.org.cn/Sudo sudo,以其他用户身份执行一个命令. 用法 sudo -h | -K | -V sudo -v [-Akns] [-g gro ...
- 总结一下几个for循环常见用法和区别
1.for循环//有人喜欢使用一个临时变量把长度缓存起来,说是数据量大时效果更好(我本人没有去验证) for(j = 0,len=arr.length; j < len; j++) { //执行 ...
- 有了malloc/free为什么还要new/delete ?
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存. 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的 ...
- malloc/free和new/delete的区别
转自:http://blog.csdn.net/chance_wang/article/details/1609081 malloc与free是C++/C语言的标准库函数,new/delete是C++ ...
随机推荐
- 组件化网页开发 / 步骤二 · 2-11 jquery的ajax方法 以及下一章跨域没懂
1,根据2-11课程老师的提示,自己封装 $.ajax 2,第三章,跨域,没看懂
- 006_FreeRTOS其他API函数
(一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...
- socket编程和并发服务器
socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进程 ...
- Django基础之form表单的补充进阶
1. 应用Bootstrap样式 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- sql mode 问题及解决 错误代码:1055 this is incompatible with sql_mode=only_full_group_by
数据库升级到5.7.21后,一个正常的分组后按日期排序,并返回数据的语句开始报错: 语句如下: SELECT id,title,add_time FROM `message` GROUP BY add ...
- Centos 6 can't found command subscription-manager
[root@localhost ~]# subscription-manager: command not found-bash: -bash:: command not found resoluti ...
- iTerm2 + oh my zsh +agnoster
安装iTerm2 iTerm2官方下载地址 http://www.iterm2.com/downloads.html 安装Oh My Bash 1.通过cat /etc/shells命令可以查看当前系 ...
- MySQL的那些坑
1. 表名一定要区分大小写,不一致就会报错 2. 无隐式的类型转换 (比如对某数值进行排序时,原表字段存储却是varchar型,就会对该数值按字符串排序而非数值大小!) 3. group by 也能 ...
- .NET笔记题库(一)
1 (1)面向对象的语言具有__继承性_性._封装性_性._多态性 性. (2)能用foreach遍历访问的对象需要实现 _ IEnumerable 接口或声明_ GetEnumerator 方法的类 ...
- 数据分析 - Power BI 链接 mysql 数据分析
链接数据库 点击确定后选择数据库, 然后输入用户名密码, 选择级别选择指定的数据库即可 之后弹出的导航器中即可有可预览的数据 更加推荐使用 再链接数据库的时候高级查询的 sql 中进行 sql 的执行 ...