malloc函数、free函数和new运算符、delete运算符
来源:互联网 发布:淘宝抠图兼职怎么找 编辑:程序博客网 时间:2024/05/18 17:44
1. C语言malloc函数和free函数
(1)malloc
原型:extern void *malloc(unsigned int num_bytes);
头文件:#include <malloc.h>或#include <alloc.h> (注意:alloc.h与malloc.h的内容是完全一致的)。
功能:分配长度为num_bytes字节的内存块。
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。返回类型是void*类型。void*表示未确定类型的指针。C、C++规定,void*类型可以强制转换为任何其它类型的指针。
使用示例:char *p;p = (char *)malloc(100);。在结构体中的使用,假设单链表结点结构体Node及指向Node结构体的指针类型typedef struct Node *LinkList;,则LinkList s; s = (LinkList)malloc(sizeof(Node));申请存储空间来生成新的节点。其中(LingList)部分是将malloc函数返回的void*类型强制转换为我们所需要的指针类型。
(2)free
功能: 与malloc()函数配对使用,释放malloc函数申请的动态内存。对于free(p);这句语句,如果p是NULL指针,那么free对p无论操作多少次都不会出问题。如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误。
用法: void free(void *ptr);。
2. C++的new和delete运算符
在对动态链表中的结点进行插入和删除操作时,需要对内存空间进行申请分配和释放撤销。在C语言中,通过malloc和free函数来实现以上功能。C++中提供了简便而功能更强大的运算符new和delete来取代malloc和free函数。
(1)运算符new的使用格式:
格式1:指针变量名=new类型标识符;
格式2:指针变量名=new类型标识符(初始值);
格式3:指针变量名=new类型标识符[内存单元个数];
注意:使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,如果申请不成功,则返回空指针NULL,用户可以根据该指针判断分配空间操作成功与否。
示例:int *p = new int(100); //开辟一个存放整型变量的存储空间并指定其初始值为100,返回一个指向该存储空间的地址(即指针p),动态创建的对象本身没有标识符名
如果要撤销上面开辟的空间,delete运算符的使用格式为delete 指针变量;,delete p;即可完成空间释放。空间释放后,指针变量p并没有撤销,该指针所占用的内存空间并未释放,p变为空指针。
(2)开辟数组空间
使用格式:
new 类型名[下标表达式]; //下标表达式可能为一维[n]、二维[m][n]或者更高维
delete [ ] 指向该数组的指针变量名; // []切记不要忘记
示例:char *pt =new char[10];开辟了包含10个元素的字符数组空间并返回字符数组首元素地址赋给指针变量pt,撤销该空间时,语句delete []pt;即可完成,指针变量前的一对方括号表示是对数组空间的操作。
(3)开辟结构体变量空间
假设已经声明了一个结构体变量Student,语句Student *p; p =new Student; delete p;实现了结构体变量内存空间的申请和撤销。
运算符new开辟内存空间时,系统会根据Student自动算出,不必用户指定。虽然其中并未定义结构体类型Student的变量,在释放内存空间之前都可以使用指针变量p来访问该空间,完成该内存空间的的赋值或读取输出操作。可以将这种操作认为是对一个无名的结构体变量进行操作。
3. malloc与new的不同点
new返回指定类型的地址,并可以自动计算所需内存空间的大小。而malloc需要手动计算字节数并在返回后强制转换指针类型。
- malloc() free()函数 和 new delete运算符的区别
- malloc函数、free函数和new运算符、delete运算符
- new delete 是运算符,malloc,free是函数
- new 、delete运算符 、operator new 、operator delete 、malloc 、 free 函数
- new delete 是运算符,malloc,free是函数(区别)
- C++学习:动态内存分配对象的new/delete运算符与函数malloc/free
- new运算符与malloc函数区别
- 内存管理:new/delete操作符与malloc()/free()函数
- c++中new和delete修饰符与malloc和free函数的区别
- C++/C语言的标准库函数与运算符的区别new/delete malloc/free
- C++/C语言的标准库函数malloc/free与运算符new/delete的区别
- C++/C语言的标准库函数与运算符的区别new/delete malloc/free
- new和delete运算符
- new和delete运算符
- new和delete运算符
- new 和 delete 运算符
- C中的malloc()函数和free()函数与C++中的new()函数和delete()函数详解
- 析构函数 和delete运算符
- 三维重建概述
- STM32之串口例程
- 华氏温度和摄氏温度互相转换
- Android 事件分发拦截(基础篇)
- 求2^N大数
- malloc函数、free函数和new运算符、delete运算符
- TCC 强一致性 实时 DEMO 下单(创建订单,扣除库存,增加积分,扣除余额)
- Flex 布局教程:实例篇
- 1002. 写出这个数 (20)
- 找工作的一些经历
- 给定一个任意的大写字母A~Z,转换为小写字母。
- SDUT-2144 图结构练习——最小生成树
- WebRTC的C/C++ API
- CTreeCtrl 控件使用总结