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三者的差别的更多相关文章

  1. malloc,calloc,realloc三者的区别

    malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...

  2. C:malloc/calloc/realloc/alloca内存分配函数

    原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() ...

  3. malloc/calloc/realloc/alloca内存分配函数

    calloc(), malloc(), realloc(), free(),alloca() 内存区域可以分为栈.堆.静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取 ...

  4. C语言 malloc calloc realloc alloc 在分配内存时的 区别

    malloc : 向堆申请分配内存,不初始化 calloc  : 向堆申请分配内存,初始化为0 realloc:  向堆申请分配内存,可调整大小 alloc   :   向栈申请内存,不需手动释放

  5. malloc calloc realloc,new区别联系以及什么时候用

    三个函数的申明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_ ...

  6. C++malloc,calloc,realloc,free函数

    在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别:     1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...

  7. malloc calloc realloc 区别

    (1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...

  8. malloc calloc realloc

    三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...

  9. malloc,calloc,realloc区别

    malloc:memory allocation calloc:The 'c' indicates 'cleared' realloc:The realloc() function changes t ...

随机推荐

  1. BZOJ 1037: [ZJOI2008]生日聚会Party( dp )

    dp(i, j, a, b)表示选了i个男生, j个女生, 后缀中男生比女生多a(最多), 女生比男生多b(最多). dp(i+1, j, a+1, max(0, b-1)) += dp(i, j, ...

  2. JSTL入门

    在页面最上方引入 -------------------- if语句 8}"> b的值大于8 --------------------- foreach语句 i的值是:${i}

  3. hdu 4454 Stealing a Cake (三分)

    Stealing a Cake Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. Centos6.4 搭建Git服务器 (最简单的方法)

    下载 git-1.8.2.tar.gz tar -zvxf git-1.8.2.tar.gz cd git-1.8.2.2 sudo make prefix=/usr/local/git all su ...

  5. OSG消锯齿

    osg::DisplaySettings::instance()->setNumMultiSamples();   在osg+mfc下成功实现抗锯齿,在程序初始化的时候,即在osg控制类中,我的 ...

  6. CVTE 一面

    在网上做完了测评之后,当天就收到面试的通知了,CVTE效率真高.第二天就去参加面试,面试前紧张了一把,后来去到之后发现只有几个应聘者,很多面试官前面都没人,估计现在中午一点,所以都去吃饭了.我和一个同 ...

  7. 多线程中Local Store Slot(本地存储槽)

    在Java中有一种ThreadLocal机制,为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突.从线程的角度看,就好像每一个线程都完全 ...

  8. python 入门快速学习整理

    Python 入门学习 1  : 对象类型 1 1.1 列表 1 1.2 字典 2 1.3 元组 2 1.4 元组 2 1.4 文件 3 2  : 条件和循环语句 3 2.1  if else语句 3 ...

  9. sharepoint 2013 文档库 资源管理器打开报错 在文件资源管理器中打开此位置时遇到问题,将此网站添加到受信任站点列表,然后重试。

    我们在使用sharepoint 2013的文档库或者资源库的时候,经常会需要用到使用“资源管理器”来管理文档,但是有时候,点击“使用资源管理器打开”,会提示如下错误: 在文件资源管理器中打开此位置时遇 ...

  10. 联想S720/S720i通刷刷机包 Vibe V1.0

    ROM介绍 基于官方最新S116底包制作,保证足够的稳定性. 增加VIBE元素,看起来更加大气.美观. 首次增加VIBE元素,720i执行起来无压力,720可能会有点卡.自行酌情刷入. 有bug请文明 ...