C语言的内存管理

前言

malloc()、calloc()、realloc()都是动态内存管理的函数,再头文件stdio.h中。

一、malloc

1、函数原型

void* malloc(size)
size,是需要在堆申请的的内存大小,单位是字节
void*,是返回类型,因为默认的返回类型是void*,所以在正常的使用时,需要强转类型;若申请空间失败(内存已满),会返回NULL。
例:

//malloc
int* p=(int*)malloc(10*sizeof(int));

二、calloc

1、函数原型

void* calloc(num,size);
num,是用来确定需要申请多少个size字节大小的空间
size,是用来确定每一个空间的大小
void*,是返回类型,因为默认的返回类型是void*,所以在正常的使用时,需要强转类型;若申请空间失败(内存已满),会返回NULL。
还会初始化每一个空间初始化为0
例:

//calloc
int* p=(int*)calloc(10,sizeof(int));
//申请了10个整型的空间,并且每个空间初始化为0

三、realloc

void* realloc(ptr,size)
realloc是用来扩容的,当malloc或者calloc在堆上申请的空间使用超出后,这时候就需要扩容了。
所以
ptr是原来malloc或calloc申请的空间的地址
size,是新申请的内存大小,如果size为0的话,就会释放掉这块空间

//realloc
int* p=malloc(10*sizeof(int));
//当malloc申请的内存空间用完了就需要扩容
p=(int*)realloc(p,10*sizeof(int));

扩容分为原地扩容和异地扩容:
原地扩容:
在这里插入图片描述
异地扩容:
在这里插入图片描述
旧的空间还会被释放掉

总结

malloc(): 用于分配指定大小的内存块,内容未初始化。
calloc(): 用于分配指定数量的元素的内存块,并将内存初始化为零。
realloc() :用于改变之前分配的内存块的大小,可以扩大或缩小内存块。
而且在动态申请空间后,需要使用free,来释放空间,不然就会导致内存泄漏等问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值