malloc于new的区别
来源:互联网 发布:php截断字符串 编辑:程序博客网 时间:2024/04/29 09:58
malloc和free是c/c++语言的标准库函数,new/delete是c++的运算符。
对于malloc:我们必须计算字节数:如 int *p;p=(int *)malloc(32*sizeof(int)),并且返回后强行转换为实际类型的指针;用malloc申请内存空间后,必须检查是否分配成功;malloc与free两个函数应该是配对出现的,使用free释放时只能使用一次,如果释放两次以上可能会出现错误(空指针例外)。
malloc是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。
对于new:new与delete是操作符,和‘+’,‘-’一样。用于动态创建和释放数组或者单个对象。
动态创建时,不必为其命名,new表达式返回为该对象新创建的指针,我们可以通过指针访问该对象。
如 int *p=new int;
new运算符还能初始化对象。如int *p=new int(10);
对于类来说,如果不提供显示初始化,会调用类的默认构造函数初始化对象;
new与delete配对出现,对于delete来说,delete释放后,指针所指向的内存被释放了,指针不再有效。此时指针变成了悬垂指针(悬垂指针指向曾经存放对象的内存,但该对象已经不存在了)。悬垂指针往往导致程序错误,而且很难检测出来。所以一旦删除了指针对象,立即将指针置为0.
总的来说,malloc和free是c/c++语言的标准库函数,new/delete是c++的运算符。它们都可以用于申请动态内存和释放内存。
对于非内部数据类型来说,光用malloc与free是无法满足要求的。对象在创建时自动调用构造函数,对象消亡时自动调用析构函数。所以不能构造函数和析构函数的任务强加于malloc/free。
- malloc于new的区别
- malloc new的区别
- new malloc的区别
- new malloc的区别
- New malloc的区别
- new/malloc的区别
- new和malloc的区别
- new和malloc的区别
- new和malloc的区别
- malloc和new的区别
- malloc和new的区别
- Malloc与new的区别
- malloc与new 的区别
- Malloc与new的区别
- new和malloc的区别
- malloc和new的区别
- Malloc与new 的区别
- new和malloc的区别
- (队列思想+快排函数)—keke祝你元宵节快乐!
- 微积分
- IOS开发之OC篇(5)—— NSNumber、NSValue
- oracle笔记整理2
- 解决CentOS无法上网问题
- malloc于new的区别
- NSData 转NSDictionary 出错之 NSJSONSerialization 抛出异常 - “Garbage at End” 解决方案
- 【bzoj1036】[ZJOI2008]树的统计Count
- I Hate It
- 数据可视化
- 相邻两数最大差值
- hdoj1003
- Fastlane相关工具安装
- 【完美解决系列】Android MediaPlayer stop called in state 1