C语言动态内存管理


一、为什么存在动态内存分配?

当我们使用数组开辟内存使用时,我们可以发现,数组开辟的大小固定,内存浪费比较严重,而且当我们使用的空间较大,超过数组大小时,不能够实现扩容这种,所以我们就需要试试动态内存开辟了。

二、动态内存函数的介绍

1.malloc和free

void* malloc(size_t size);

 malloc的参数是需要开辟内存的大小,单位是字节。

这个函数可以向内存申请一块连续可用的空间,并返回这块空间的指针。

需要注意的是:

1.开辟可能会失败,在使用之后要进行判断检查。

2.返回值的类型是void*,所以使用时需要自己决定返回类型。

3.如果参数size为0,malloc的行为是未定义的,取决于编译器。

    int* a;
	a = (int*)malloc(sizeof(int)*10);
	for (int i = 0; i < 10; i++)
	{
		a[i] = i;
		printf("%d ", a[i]);
	}

 这里就是开辟了10个int类型大小的空间,但要注意,这里空间的大小并没有初始化,所以打印出了的值不是0。

void free(void* p);

有开辟那么就要释放,free函数是用来释放动态开辟的空间的,如果忘记释放的话,可能会导致内存泄漏。

同时,如果释放的空间不是动态开辟的,那么free的行为是错误的。如果释放的是空指针,则无事发生。

2.calloc

void* calloc(size_t num,size_t size);

 num是需要开辟的数量,size是开辟类型的大小。

 这个函数和malloc类似,区别在于calloc函数会将开辟的空间初始化为0。

    int* arr;
	arr = (int*)calloc(10, sizeof(int));
	for (int i = 00; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

这个代码的运行就会打印出0。

2.realloc

void* realloc(void* ptr,size_t size);

 realloc是用来调整动态开辟内存的空间大小,可以变大也可以变小。

ptr是需要调整的内存地址 ,size是调整之后的大小。

    int* arr;
	arr = (int*)calloc(10, sizeof(int));
	if (arr == NULL)
	{
		return;
	}
	int* p = (int*)realloc(arr, 20);

总结

学会了动态内存分配后,我们就可以解决很多的内存不足问题,在一些项目中,这样就更加方便和节约内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值