malloc、calloc、realloc三者的差别
1、malloc
作用:分配内存块
原型:void *malloc(size_t size);size表示要分配的字节数
返回值:返回一个指向所分配空间的void指针,假设没有足够的内存可用,则返回NULL。
假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换。比如:
char* p;
p=(char*)malloc(20);
假设size是0,则malloc在堆中分配一个长度为0的项,而且返回一个指向那项的有效指针。比如:
int *p1=(int*)malloc(0) //ok,p1!=NULL
我们通常要检查malloc返回的值,即使须要分配的内存块很小。
由于校准和维护信息的原因,所分配的内存可能比size bytes要大。
2、calloc
作用:在内存中分配一个元素被初始化为0的数组。
原型:void *calloc(size_t num,size_t size);num表示元素的个数,size表示每一个元素的大小。
返回值:返回一个指向所分配空间的void指针。
假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换。比如:
char* p;
p=(char*)calloc(20,sizeof(char));
3、realloc
作用:又一次分配内存块
原型:void *realloc(void* memblock,size_t size);memblock指向原先分配的内存块,size表示新的内存块的字节大小。
返回值:返回一个指向又一次分配(可能移动了)的内存块的大小。比如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);
假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换。
假设size是0而且缓冲区參数不是NULL,或者没有足够可用的内存去扩展给定的大小,那么将返回NULL。对于前者,原先的内存将被释放,对于后者,原先的内存将保持不变。
假设memblock是NULL,那么realloc就和malloc的行为一样分配一个新的size字节大小的块。假设memblock不是NULL,那么它应该是一个早先由malloc或者realloc返回的指针。比如:
int *p3=(int*)realloc(NULL,10*sizeof(int));//ok,p3!=NULL
因为新的内存块可能在一个新的内存位置,所以由realloc返回的指针不能保证和所传递的memblock是同一个指针。
參数size给出了新的内存块的大小,以字节为单位。块的内容保持不变直到新的和旧的块的大小变小,尽管新的内存块可能在一个不同的位置。
malloc、calloc、realloc三者的差别的更多相关文章
- malloc,calloc,realloc三者的区别
malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...
- C:malloc/calloc/realloc/alloca内存分配函数
原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() ...
- malloc/calloc/realloc/alloca内存分配函数
calloc(), malloc(), realloc(), free(),alloca() 内存区域可以分为栈.堆.静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取 ...
- C语言 malloc calloc realloc alloc 在分配内存时的 区别
malloc : 向堆申请分配内存,不初始化 calloc : 向堆申请分配内存,初始化为0 realloc: 向堆申请分配内存,可调整大小 alloc : 向栈申请内存,不需手动释放
- malloc calloc realloc,new区别联系以及什么时候用
三个函数的申明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_ ...
- C++malloc,calloc,realloc,free函数
在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别: 1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...
- malloc calloc realloc 区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...
- malloc calloc realloc
三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...
- malloc,calloc,realloc区别
malloc:memory allocation calloc:The 'c' indicates 'cleared' realloc:The realloc() function changes t ...
随机推荐
- BZOJ 1951: [Sdoi2010]古代猪文( 数论 )
显然答案是G^∑C(d,N)(d|N).O(N^0.5)枚举N的约数.取模的数999911659是质数, 考虑欧拉定理a^phi(p)=1(mod p)(a与p互质), 那么a^t mod p = a ...
- 学习PS必须弄懂的专业术语
在学习PS的过程中,我们经常会遇到一些专业术语,下面我们来对一些常用的.比较难理解的术语进行简单讲解. 像素:像素是构成图像的最基本元素,它实际上是一个个独立的小方格,每个像素都能记录它所在的位置和颜 ...
- C++中的string
要想使用标准C++中string类,必须要包含 #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 ...
- Android ActionBar详解(二)--->使用ActionBar显示选项菜单
MainActivity如下: package cc.testsimpleactionbar1; import android.os.Bundle; import android.app.Activi ...
- MVC中Filter拦截问题记录之重定向陷阱
出错环境:被拦截的页面中使用了未实例化的对象,比如只有登录后才有的UserInfor对象. 理想中:浏览器请求页面时,会被Filter拦截,然后重定向到指定页面: 实际现象:将断点打入Filter中, ...
- Linux内核和驱动编译常见问题
1.获取内核源码应为 git clone depth=1 不然编译时会报错 2.有些RTL188CUS网卡与wpa_supplicant兼容有问题 更新wpasupplicant或许能解决 这里用i ...
- Linux例行工作crontab
第一步编辑要定时执行的脚本: myScript.sh myScript.sh的内容为:touch /root/`date +%F' '%T`.txt 为myScript.sh增加可执行权限:chmod ...
- BZOJ 1101 [POI2007]Zap(莫比乌斯反演)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1101 [题目大意] 求[1,n][1,m]内gcd=k的情况 [题解] 考虑求[1,n ...
- java面向对象编程(类、对象)
一.面向对象编程概述面向对象编程(Object Oriented Programming,缩写为OOP)是当今最流行的程序设计技术,它具有代码易于维护.可扩展性好和代码可常用等优点.面向对象的设计 ...
- 史上最简单的Hibernate入门简单介绍
事实上Hibernate本身是个独立的框架,它不须要不论什么web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了非常多非Hibernate ...