C语言中malloc()和calloc()有什么区别?
展开全部
这是申请内存的函数,存在与头文件stdlib.h中,malloc的使用方法最简单接下来是例子:
#include<stdlib.h>
#include<stdio.h>
main()
{
int
*m;
m=(int
*)malloc(sizeof(int)*16);//这里每次在使用malloc的时候前面要加一个强制类型转换,转换到你需要的类型,后面的括号内就是申请的大小,我这例子是申请的16个整数型大小内存代表这个m可以当数组用了
m[11]=8899;
printf("%d",m[11]);
free(m);//记得每次申请后都需要释放内存,不然会造成浪费影响计算机运行速度
}
calloc是申请后自动将申请的内存全都初始化为0
举个例子:
#include<stdio.h>
#include<stdlib.h>
main()
{
int
*m;
m=(int
*)calloc(16,sizeof(int));//是不是感觉差不多就是把*改成了,而已
printf("%d",m[10]);//这个肯定是0
free(m);
}
将他们的原型放在这里void
*malloc(int
size);
void
*calloc(int
number,int
size);
size代表大小,number代表个数
#include<stdlib.h>
#include<stdio.h>
main()
{
int
*m;
m=(int
*)malloc(sizeof(int)*16);//这里每次在使用malloc的时候前面要加一个强制类型转换,转换到你需要的类型,后面的括号内就是申请的大小,我这例子是申请的16个整数型大小内存代表这个m可以当数组用了
m[11]=8899;
printf("%d",m[11]);
free(m);//记得每次申请后都需要释放内存,不然会造成浪费影响计算机运行速度
}
calloc是申请后自动将申请的内存全都初始化为0
举个例子:
#include<stdio.h>
#include<stdlib.h>
main()
{
int
*m;
m=(int
*)calloc(16,sizeof(int));//是不是感觉差不多就是把*改成了,而已
printf("%d",m[10]);//这个肯定是0
free(m);
}
将他们的原型放在这里void
*malloc(int
size);
void
*calloc(int
number,int
size);
size代表大小,number代表个数
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
1、调用参数不一样
2、malloc分配内存后,不将分配的内存清零,但calloc会清零
2、malloc分配内存后,不将分配的内存清零,但calloc会清零
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数原型:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
函数声明都在stdlib.h函数库内。
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为"size"字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为"size"字节的连续区域,返回首地址。
realloc 不能保证重新分配后的内存空间和原来的内存空间指在同一内存地址, 它返回的指针很可能指向一个新的地址。所以,在代码中,必须把realloc返回的值,重新赋给 p 如:
p = (char *) realloc (p, old_size + new_size);
甚至可以传一个空指针(0)给 realloc ,则此时realloc 作用完全相当于malloc。如:
int* p = (char *) realloc (0,old_size + new_size); //全新分配一个内存空间,作用完全等同于以下这行:
int* p = (char *) malloc(old_size + new_size);
calloc(len, size)与malloc相似,参数len为申请地址的单位元素长度,size为元素个数,如:
char* p;
p=(char*)calloc(sizeof(char),1000);
另外:void *alloca(size_t size)
函数说明:alloca()用来配置size个字节的内存空间,然而和malloc/ calloc不同的时, alloca()是从堆栈空间(stack)中配置内存,因此在函数返回时会自动释放此空间
返回值 :若配置成功则返回一指针, 失败则返回NULL
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
函数声明都在stdlib.h函数库内。
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为"size"字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为"size"字节的连续区域,返回首地址。
realloc 不能保证重新分配后的内存空间和原来的内存空间指在同一内存地址, 它返回的指针很可能指向一个新的地址。所以,在代码中,必须把realloc返回的值,重新赋给 p 如:
p = (char *) realloc (p, old_size + new_size);
甚至可以传一个空指针(0)给 realloc ,则此时realloc 作用完全相当于malloc。如:
int* p = (char *) realloc (0,old_size + new_size); //全新分配一个内存空间,作用完全等同于以下这行:
int* p = (char *) malloc(old_size + new_size);
calloc(len, size)与malloc相似,参数len为申请地址的单位元素长度,size为元素个数,如:
char* p;
p=(char*)calloc(sizeof(char),1000);
另外:void *alloca(size_t size)
函数说明:alloca()用来配置size个字节的内存空间,然而和malloc/ calloc不同的时, alloca()是从堆栈空间(stack)中配置内存,因此在函数返回时会自动释放此空间
返回值 :若配置成功则返回一指针, 失败则返回NULL
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询