c/c++ 补漏之动态内存分配,malloc,free,new delete (一)
来源:互联网 发布:网络市场调研报告范文 编辑:程序博客网 时间:2024/05/16 08:52
1.malloc函数
原型:extern void * malloc(int size)
malloc向系统申请分配size字节的内存,返回的类型为void* ,在使用的时候要强制进行类型转换为你需要的类型。
int * ptr = (int * )malloc(sizeof(int ) * 100);
2.free 函数
释放malloc分配的内存
注意事项:
1)申请了内存之后,要检查是否分配成功
if(ptr!= NULL )
2)当不需要再使用分配的内存时,记得释放。释放之后应该把指向这块内存的指针指向NULL,来防止程序后面不小心调用它。
3.malloc()的内存来自哪里?
malloc返回的指针指向堆中内存,系统中有一个记录空闲内存地址的链表,当有申请请求时,就会遍历链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从链表中删除,并返回该结点的地址。
在c++中使用new和delete来动态创建和释放数组和对象。
4.delete 和delete[]区别
delete ptr ,释放单个对象
delete[]ptr,释放数组
当然,delete要和new成对出现。
5.delete 之后,重设指针
delete p
执行完之后,p指针变成了不确定指针,p说指向的内存已经被释放,变成悬垂指针,所以一旦删除了指针所指向的对象,立即将指针置零 int * p = 0;这样就清楚指明指针不再指向任何对象。
6.零值指针和NULL指针
零值指针是值为0的指针,可以是任何一种指针类型。
空指针:是一种状态,是认为的认为它不提供任何地址。
7.new和malloc的区别
1)new返回指定类型指针,自动计算所需空间的大小
int* ptr= new int;
malloc返回void*,需要加上类型转换,由我们计算所需空间
2)malloc只管分配内存,不管内存初始化,得到的内存中,值是随机的。
new可以对对象初始化
int *ptr = new int(100);
3)malloc/free是c++/c的标准库函数,new/delete为c++的运算符。
4)对于非内部数据类型的动态对象的内存管理,由于存在构造和析构,不能对库函数malloc进行修改,使用new/delete。
对于内部数据类型,malloc/new 都可以使用
5)c只能使用malloc/delete,c++两者皆可
- c/c++ 补漏之动态内存分配,malloc,free,new delete (一)
- C/C++内存分配方式,栈区堆区 new/delete/malloc/free
- Linux C 动态内存分配--malloc,new,free及相关内容
- C/C++内存使用之malloc/free,new/delete
- 动态内存分配- new/delete 和malloc/free的区别
- C++学习:malloc/free和new/delete动态内存分配
- 动态内存的分配,包括 new delete malloc realloc free,一维数组和二维数组
- linux C 之动态内存分配malloc ,calloc,realloc,free
- 内存分配(new/delete,malloc/free,allocator,内存池)
- c++内存分配 -- new, delete, malloc, free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free(转)
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free .
- hibernate的速度问题--hibernate.jdbc.fetch_size和 hibernate.jdbc.batch_size
- 线性表(二)——单链表(2)——单链表的自建算法库
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(九)
- 深度学习Keras 库 跑例子
- 异常小总结
- c/c++ 补漏之动态内存分配,malloc,free,new delete (一)
- Direct3D高程图立体显示
- 你不知道的JavaScript--Item31 值得你挑战的JavaScript面试题(45题)
- Android Studio 汉字转拼音
- nginx优化
- Word 导出带目录书签的PDF文档 Office
- Android中对Log日志文件的分析
- 【cocos2dx】监听安卓机的返回键
- [kuangbin带你飞]专题一 简单搜索G - Shuffle'm Up(POJ 3087)