动态内存管理2(calloc realloc函数)

重点动态分配函数,后面的数据结构之单链表实现顺序表等内容需要大量用到这类内容,因此一定要重点掌握,因为在学校这段时间需要向后赶一些专业课,因此每篇的内容会比较少,但都会长期连更,因此希望大家多多关注点赞哦!

1.calloc函数

类比malloc函数也是用来开辟动态内存的

1.1函数形式:

void* calloc(size_t num, size_t size);

1.2两函数对比:

 形式上就是多了一个size_t num

1.3calloc函数的使用

1.函数的功能:为num个大小为size的元素开辟空间,并且把空间每个字节初始化为0

2.与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全 0。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int* p = (int*)calloc(10, sizeof(int));
	if (NULL != p)
	{
		int i = 0;
		for (i - 0; i < 10; i++)
		{
			printf("%d", *(p + i));//循环打印出来每个元素
		}
	}
	free(p);//释放;
	p = NULL;
	return 0;
}

运行结果: 

因此,如果需要对申请的空间的内容进行初始化,那么可以直接使用calloc函数完成,首先开辟了空间,其次完成了初始化

2.realloc函数

2.1函数形式

void* realloc(void* ptr, size_size);

 

2.3函数作用(和使用)

1.让动态内存管理变得更加灵活

2.可以直接调整开辟后的内存大小

注意:

1.ptr是要调整的内存地址,传过去的是一个指针

2.size是调整后的大小

3.返回值是调整后的内存起始位置,也就是返回了一个地址(指针)

4.调整内存大小的过程中,会将原来内存中的数据移动到新的空间

2.4调整空间的两种情况

2.4.1原有空间之后有足够大的情况

2.4.2原有空间没有足够大的情况

像这种第二种情况就需要在堆空间上重新开辟一块空间来使用,这样的话函数返回的是一个新的内存的地址(指针) 

2.5使用realloc函数的注意事项

//代码1 - 直接将realloc的返回值放到ptr中 
ptr = (int*)realloc(ptr, 1000);//这样可以吗?(如果申请失败会导致报错无法正常申请) 

//推荐代码2 - 先将realloc函数的返回值放在p中,不为NULL,在放ptr中 
int* p = NULL;
p = realloc(ptr, 1000);
if (p != NULL)
{
	ptr = p;
}
//业务处理 
free(ptr);
return 0;
}

完—

加上昨天讲解的2个一共是4个函数后续会经常用到,大家可以先进行收藏。等到这几节全部讲完也会出一个全篇的方便大家查看。

有什么问题可以直接评论或者私信我哦

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值