realloc,malloc,calloc三者的区别
2016-03-16 16:52
399 查看
malloc,calloc,realloc,free属于C函数库,而new/delete则是C++函数库;
都在stdlib.h函数库内
它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL
1、malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
2、calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:
这个例子与上一个效果相同
malloc和calloc的区别是1块与n块的区别和初始化!!!!
3、realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度
如:
注意,这里的空间长度都是以字节为单位。
多个-alloc的比较
alloc:唯一在栈上申请内存的,无需释放; malloc:在堆上申请内存,最常用; calloc:malloc+初始化为0; realloc:将原本申请的内存区域扩容,参数size大小即为扩容后大小,因此此函数 要求size大小必须大于ptr内存大小。
realloc,malloc,calloc的区别
三个函数的声明分别是:void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement);
都在stdlib.h函数库内
它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL
1、malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
char* p; p=(char*)malloc(20);
2、calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:
char* p; p=(char*)calloc(20,sizeof(char));
这个例子与上一个效果相同
malloc和calloc的区别是1块与n块的区别和初始化!!!!
3、realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度
如:
char* p; p=(char*)malloc(sizeof(char)*20); p=(char*)realloc(p,sizeof(char)*40);
注意,这里的空间长度都是以字节为单位。
相关文章推荐
- c语言中malloc、realloc与calloc 的区别以及联系
- C++中new与delete、malloc与free应用分析
- C语言中的malloc使用详解
- new和malloc的区别深入解析
- new、delelte和malloc、free的关系
- 初识英特尔线程构建模块之内存管理tbb_malloc
- 浅谈C中的malloc和free
- 一级指针和二级指针做形参分配动态地址空间
- 用brk实现sbrk,关于brk的返回值
- C语言堆内存堆申请与文件读入的性能分析
- C中动态分配内存
- malloc要不要强制转换返回值
- C/C++中野指针的问题
- 数据结构 第三季(part 3)
- C语言中malloc 动态申请多维数组
- 产生随机组丢到txt中
- malloc函数的使用
- 关于STDLIB.H头文件中的函数应用
- 数据结构 第二章 线性表(2)malloc和realloc内存分配问题
- new/delete和malloc/free的区别