动态内存管理 (malloc, free, calloc, realloc)

为什么存在动态内存管理?

#include <stdio.h>

int main()
{
   
	int arr[20] = {
    0 };

	return 0;
}

上述代码中的arr数组已经被我们创立,但这样设计代码可能会有一定的缺陷,如果当我们所需要用的数据超过 arr数组的长度时,会形成数组越界,而造成语法出错。这时,动态内存分配管理便由此而出。

动态内存管理相关函数

malloc 和 free

C语言为我们提供了相应的动态内存管理函数。首先我们将要了解的是开辟动态内存空间的 malloc 和释放动态内存空间的 free

malloc

函数原型:void malloc (size_t size);
size_t size 表示malloc所创建的空间是我们自己决定和创建的,其大小为字节。如size为0时,这是标准没有定义的,结果取决于编译器自身。
void* 表示可以返回任意类型的指针,使用我们在使用malloc时,一定要强制类型转换成我们自己所需要的

当我们使用malloc向内存开辟空间时, malloc会有两种情况:
(1)当malloc开辟成功时,返回一个指向开辟好空间的指针
(2)当malloc开辟失败是,返回一个NULL指针,所以在使用malloc开辟空间后,一定要判断malloc是否开辟成功。

free

C语言同时也提供个释放和回收动态内存的函数:free
函数原型: void free (void ptr);
ptr 表示了在使用free函数时,需要我们将动态空间的首地址传输给free,
同时free并不需要返回值

在使用完free后, 一定要将 ptr 赋成NULL。
以代码举例

#include <stdio.h>
//使用malloc和free时需要引的头文件
#include <stdlib.h>
int main()
{
   
	//代码1
	int num = 0;
	scanf("%d", &num);
	int arr[num] = {
    0 };//C99中存在
	//代码2
	int* ptr = (int*)malloc(10 * sizeof(int));
	if (ptr == NULL)
	{
   
		return;//如果ptr开辟失败,程序直接结束
	}

	free(ptr);
	ptr = NULL;//必须赋为NULL

	return 0;
}

calloc

C语言除了malloc可以

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值