malloc 和 calloc

calloc是一个C语言函数

  函数名: calloc   

功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。   

跟 malloc的区别:   calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。   

用 法: void *calloc(unsigned n,unsigned size);

头文件:stdlib.h 或malloc.h   相关函数:mallocreallocfree

编辑本段 应用举例

程序例1

  #include <stdlib.h>  

 #include<string.h>  

 #include <stdio.h>  

 int main(void)   

{  

 char *str = NULL;   /* 分配内存空间 */   

str = (char*)calloc(10, sizeof(char));   /* 将hello写入*/   

strcpy(str, "Hello");   /*显示变量内容*/  

 printf("String is %s\n", str);  

 /* 释放空间 */   free(str);   

return 0;

  }

程序例2

  从这个例子可以看出calloc分配完存储空间后将元素初始化。

  #include<stdio.h>  

 #include<stdlib.h>  

 int main(void)   

{   int i;   

int *pn=(int *)calloc(10,sizeof(int));  

 for(i=0;i<10;i++)  

 printf("%3d",*pn++);  

 printf("\n");  

 free(pn);   

return 0;   

}   

输出十个0。

malloc

函数原型: extern void *malloc(unsigned int num_bytes);

函数描述: 分配长度为 num_bytes 字节的内存块

入口参数: num_bytes 内存块的大小(单位为字节)

出口参数: 无(或为空)

返回值: 如果分配成功则返回指向被分配内存的指针,否则返回空指针 NULL
函数说明 不再使用时一定要记得释放,调用函数 free

使用示例:

char *pTemp = NULL;

pTemp = (char *)malloc(10 * sizeof(char));

个人理解:

[1] 申请空间大小时,利用 sizeof 做出计算,这样保证会分配正确数量的内存空间;

[2]malloc 返回的内存是没有被初始化的,所以可能包含着任何的随机垃圾,应该在其后马上调用 memset 函数进行初始化为 0 的操作;

calloc

函数原型: void *calloc(size_t nelem, size_t elsize);

函数描述: 分配指定长度的内存空间

入口参数: nelem 元素的个数(如为 10 char 申请空间,则为 10

elsize 元素所占用的字节(如为 char 申请,则为 sizeof(char)

出口参数: 无(或为空)

返回值: 如果分配成功则返回指向被分配内存的指针,否则返回空指针 NULL
函数说明 不再使用时一定要记得释放,调用函数 free

使用示例:

char *str = NULL;

str = calloc(10, sizeof(char));

个人理解:

[1]calloc 实际上也只能算作是 malloc 的一种简单的封装;

[2] 它会自动的把动态分配的内存进行清 0 操作,并且保证了分配数量的正确,所以建议使用。

malloc 函数有一个将可用的内存块连接为一个长长的列表的所谓空闲链表

calloc 返回的是一组对象的数组,而 malloc 返回的是一个对象。使用 calloc 表明是要使用一个数组.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值