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. leetcode Integer to Roman python

    class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str &qu ...

  2. Linux命令之修改主机名

    ubuntu永久修改主机名 1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后: 其二,在终端 ...

  3. break在switch中的使用例子

    /* Name:break在switch中的使用例子 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月21日 03:16:52 Description:以 ...

  4. Hyperworks、Nastran、Abaqus与ansys的区别

    hypermesh不过是前处理,radioos就是hm的求解器,也是非常强大的可以处理很多非线性问题,最重要的是hm的优化功能强大.比那几个好一些.abaqus适合非线性分析,尤其是接触分析.nast ...

  5. Android开发中如何解决加载大图片时内存溢出的问题

    Android开发中如何解决加载大图片时内存溢出的问题    在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...

  6. VS2010/MFC对话框:消息对话框

    消息对话框 我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等.因为在软件开发中经常用到消息对话框,所以MFC提供了两个函数可以直接生成指定风格的消息对话框,而不 ...

  7. dp-史上最戳最长最臭代码-hdu-4733-G(x)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4733 题目大意: 定义G(x)=x⊕(x>>1).给两个由0.1.?组成的长度相同的字符 ...

  8. Android 五大布局(LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout、TableLayout )

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  9. UVA - 1103Ancient Messages(dfs)

    UVA - 1103Ancient Messages In order to understand early civilizations, archaeologists often study te ...

  10. [Ext JS 4] 布局之实战一 - 中间区块不会自动伸展 (tab)

    前言 [Ext JS 4] 布局之实战一 - 中间区块不会自动伸展 (tab) 在上一篇中,中间的tab 区块无法自动伸展的原因一句话说就是: 使用contentEL的方式,相关HTML元素不会参与组 ...