calloc、malloc、realloc函数的区别及用法

/* 需要手动计算内存大小,未初始化 */
int *p  = (int *)malloc(20 * sizeof(int));
/* 不需要手动计算内存大小,初始化为0 */
int *q  = (int *)calloc(20, sizeof(int));
/* 动态内存 扩大/缩小 * 1.成功分配:
 *   1.1 返回地址相同, 原内存后 有 空余内存,返回原来指针的地址;
 *   1.2 返回地址不同, 原内存后 没有 空余内存,新分配一块儿内存,并把原来的内存内容拷贝过来,原来的内存释放掉; * 2.失败返回NULL:
 *   2.1 原内存不释放, 重新分配的内存过大,分配失败,返回NULL,原内存不释放;
 *   2.1 原内存释放, 原指针不为NULL, 重新分配的大小为0,返回NULL,原内存释放,realloc(p, 0) === free(p);别这么用! * 3.扩容后的内存较原来的小,数据会丢失 */ int *pp = (int *)realloc(p, (20 + 10) * sizeof(int));

原文地址:https://www.cnblogs.com/frisk/p/12618533.html

时间: 2024-10-02 12:02:15

calloc、malloc、realloc函数的区别及用法的相关文章

PHP易混淆函数的区别及用法汇总

本文实例分析了PHP易混淆函数的区别及用法.分享给大家供大家参考.具体分析如下: 1.echo和print的区别PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1. PHP代码: 复制代码代码如下: $r = print "Hello World"; 这意味着print可用在一些复杂的表达式中,而echo则不

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,p

PHP易混淆函数的区别及用法汇总(函数和方法的区别)

1.echo和print的区别PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1. PHP代码: 复制代码代码如下:$r = print "Hello World"; 这意味着print可用在一些复杂的表达式中,而echo则不行.但是,因为echo语句不要求返回任何数值,所已在代码中echo语句的运行效率要略

关于call和apply函数的区别及用法

call和apply函数是function函数的基本属性,都可以用于更改函数对象和传递参数,是前端工程师常用的函数.具体使用方法请参考以下案列: 例如: 申明函数: var fn = function (msg, isalert) { if (isalert) alert(this + msg); }; 用法: call: fn.call(/*context,arg1,arg2,...*/); apply:fn.call(/*context,[arg1,arg2,...]*/); 讲述:第一个参

c语言中realloc()函数解析

一.基本特性 1. realloc()函数可以重用或扩展以前用malloc().calloc()及realloc()函数自身分配的内存. 2. realloc()函数需两个参数:一个是包含地址的指针(该地址由之前的malloc().calloc()或realloc()函数返回),另一个是要新分配的内存字节数. 3. realloc()函数分配第二个参数指定的内存量,并把第一个参数指针指向的之前分配的内容复制到新配的内存中,且复制的内容长度等于新旧内存区域中较小的那一个.即新内存大于原内存,则原内

realloc,malloc,calloc函数的区别

from:http://www.cnblogs.com/BlueTzar/articles/1136549.html realloc,malloc,calloc的区别 三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 都在stdlib.h函数库内 它们的返回值都是请求

malloc、calloc、realloc、new以及alloca函数区别

malloc.calloc.realloc.new以及alloca函数 一.综合叙述 1) malloc 函数: void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化. 2)calloc 函数: void *calloc(unsigned int num, unsigned int size) 按照所给的数据个数和数据类型所占字节数,分配一个

C 语言中 malloc、calloc、realloc 和free 函数的使用方法

C标准函数库中,常见的堆上内存管理函数有malloc(), calloc(), recalloc(), free(). 之所以使用堆,是因为栈只能用来保存临时变量.局部变量和函数参数.在函数返回时,自动释放所占用的存储空间.而堆上的内存空间不会自动释放,直到调用free()函数,才会释放堆上的存储空间. 一.具体使用方法 1.malloc() 头文件:stdlib.h 声明:void * malloc(int n); 含义:在堆上,分配n个字节,并返回void指针类型. 返回值:分配内存成功,返

论C语言的malloc,calloc,new,realloc,alloca的机制和区别

最近笔试老是遇到关于C语言的malloc,new之类的内存机制问题,作为一个做java开发的程序员不免有些郁闷,驾驭不了.乘空闲下来的这些时间,好好整理下C语言中各个内存函数的简单机制,作用和区别: C语言内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集