动态内存管理,浅谈malloc,calloc,realloc函数与柔性数组(解决上一个通讯录开始创建固定大小数组的问题)

本文介绍了C/C++动态内存管理中的malloc, calloc, realloc函数,以及如何利用柔性数组解决固定大小数组的问题。讨论了动态内存分配的必要性,malloc和calloc的区别,realloc的内存调整策略,以及使用柔性数组创建变长数组的方法。通过实例展示了动态内存分配的典型用法,并强调了内存释放的重要性。" 111374117,10293864,Gradle插件详解:从入门到实践,"['Gradle', '前端构建', '构建工具', 'Android开发', 'Java开发']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一个版本的通讯录我们实现了通讯录的增删改查找和展示已有联系人信息的功能,但是我们开始定义了一个num个元素的联系人数组来保存各个联系人的信息可是当联系人个数超出num时就会发生数组下标越界问题或者是在程序运行初始我们没有联系人信息的时候却仍然创建了这样一个大小固定的数组,比较占用内存,为了解决这一问题我们就要使用柔性数组来保存联系人信息,所谓柔性数组就是大小可以改变的数组但是它在堆上创建。这就不得不讲动态内存管理的相关知识了。

首先为什么要存在动态内存分配呢?

我们知道通常我们在栈空间上开辟连续空间(为数组开辟空间的时候)我们必须指定数组的长度这样在编译的时候才能为它分配所需要的内存。这种一般开辟内存的方式只能在栈空间上开辟少量的空间,而在堆上我们可以开辟大量的空间并且这种开辟内存的方式不够灵活,不能解决需要动态确定数据的问题,而动态开辟空间则可以解决不定长的数据保存问题。

如何进行动态内存分配呢?其实主要是依赖于函数来实现的。

1.malloc函数

malloc函数可以向内存申请一块连续可用的空间,如果开辟成功则返回指向这块空间的指针。

malloc函数的参数是你想要开辟的空间大小注意他的单位是字节,它的返回值类型是void*这就说明了如果你想要对它开辟的空间进行操作(好像一句废话)就必须强转它的返回值类型,强转为你要用这块空间保存的数据类型。而对于malloc函数,它不一定能成功开辟你想要的空间这就需要程序员对它的返回值做出判断。

malloc函数如果开辟空间成功则就会返回一个指向开辟好空间的指针;

如果开辟空间失败则会返回一个NULL指针,所以一定要对mall

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值