【C/C++】【动态内存管理】 malloc 和 free

零.导言

        今天,我们来学习动态内存管理的第一个内容:malloc 和 free。肯定有小伙伴好奇,为什么 malloc 和 free 要放在一起讲。这是因为 malloc (动态内存申请)free (动态内存释放)是成对出现的,既不能只申请不释放,也不能只释放不申请。


一.malloc的使用方式

        创建数组我们都学过,但是当我们想要创建一个大小可变的数组时却会犯难,这是因为我们创造的数组的内存是静态的,不能改变大小,一旦超出数组范围就会越界。

        即使是变长数组也不能在确定数组大小后改变数组大小,此时动态内存申请就派上了用场。

        动态申请的数组可以任意的改变其大小,作为代价,我们要手动释放动态申请的内存

        malloc使用方法如下:

int capacity = 10;
int* arr = (int*)malloc(sizeof(int) * capacity);
if(arr == NULL)
{
    perror("malloc fail!");
    exit(1);
}

        此处有几个要点要注意:

  1. 此处的 arr 为 int 类型的指针(int*),其原理已在指针的章节讲过,此处不再赘述。
  2. malloc 的返回值是 void 类型的指针 (void*),想要让 arr (int*)接收返回值,需要进行强制类型转换,将(void*)转换为(int*)。
  3. malloc 接收的参数为 (size_t)类型的变量,此参数决定创造的数组的内存空间大小。如此处的 arr 的内存空间大小为 4 * 10 = 40, 可以存放10个整形数据,相当于 arr[10]。
  4. 动态申请内存可能会失败,此时需要检查动态申请内存是否成功,若不成功,则退出并报错。

二.free的使用方式

        当申请了动态内存空间并使用完后,需要使用free函数将申请的空间释放。

        操作方法如下:

free(arr);
arr = NULL;

        同时别忘了将指针(arr)置为空,防止存在野指针。


三.总结

        malloc 和 free 是同时存在的,如果在动态内存申请后,不及时释放空间,会造成空间浪费。也可能造成其他错误。

        !!!注意:malloc 申请空间后并不会将数组的数据初始化,需要手动处理!!!


四.相关链接

        C语言指针的介绍-优快云博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值