【动态内存函数】malloc,free,calloc,realloc用法

1.malloc

在这里插入图片描述
malloc函数在使用时需要传过去开辟的字节个数,并返回开辟空间的起始地址,由于返回的地址为无类型的我们需要对它进行强制类型转换成我们需要的类型。
如果malloc开辟内存空间失败则malloc会返回空指针NULL。

    int* p = (int*)malloc(10 * sizeof(int));
	if (p == NULL)
	{
		printf("开辟失败\n");
	}
	else
	{
		printf("开辟成功\n");
	}

2.free

动态开辟是在堆区上开辟内存的,而堆区上开辟的内存需要程序员手动释放,否则会造成内存泄漏。
释放内存所需要的函数为free函数。
要注意的是在释放完空间后p指针还是指向之前开辟的空间,为了安全,我们需要将指针p指向NULL。

	free(p);//释放内存
 	p = NULL;//将p置为空指针

3.calloc

在这里插入图片描述
使用calloc函数需要传入两个参数,一个是元素个数,一个是每个元素的字节大小。
与malloc函数不同的是,calloc函数会将开辟空间的每个字节都初始化为0
calloc开辟空间失败也会返回空指针NULL

4.realloc

在这里插入图片描述
但我们使用malloc或calloc开辟的内存空间不够了或太大了,就可以通过reallco函数来扩大或缩小开辟的内存空间。
为了防止因为realloc开辟空间失败而导致p找不到原来开辟的空间,我们需要用一个新指针ptr来判断是否开辟空间成功。

int* p = (int*)malloc(10 * sizeof(int));
	if (p == NULL)
	{
		printf("开辟失败\n");
	}
	else
	{
		printf("开辟成功\n");
	}
	int* ptr = (int*)reallco(p, 20 * sizeof(int));
	if (ptr != NULL)
	{
		p = ptr;//开辟成功将p指向开辟的空间
	}
	else
	{
		printf("开辟失败\n");
	}
	free(p);//释放内存
	p = NULL;//将p置为空指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值