【C语言】动态内存管理(下)

news2024/10/23 5:47:06

     

本篇博客将讲解以下知识:

1、calloc和realloc

2、常见的动态内存错误

1、calloc和realloc

(1)calloc

C语言中还提供了一个函数叫calloc,calloc也用来动态内存分配

calloc函数原型:

void*     calloc(size_t  num,   size_t    size)

1))函数的返回值是申请的空间的起始地址

2))函数的功能是把num个大小为size的元素开辟一块空间并且把空间的每个字节初识化为0;

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

示例:

所以,如果我们对申请的内存空间的内容要求初识化,那么可以很方便的使用calloc函数来完成任务。

(2)realloc函数

注意:使用realloc函数时,要包含头文件:stdlib.h

1))realloc函数的出现让动态内存管理更加灵活

2))有时我们会发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的使用内存,我们一定会对内存的大小做灵活的调整。

realloc函数的原型:

void*   realloc(void *   ptr,  size_t  size)

1))ptr是要调整的内存地址

2))size为调整之后新大小,单位是字节。

3))返回值为调整之后的内存起始地址。

4))这个函数调整原内存空间的基础上,还会将原来内存中的数据移动到新的空间。

5))realloc在调整空间时存在两种情况

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

情况二:原有空间之后没有足够大的空间。

情况三:返回的是NULL

情况二:原有空间之后没有足够大的空间。

1))在堆区的内存中找一个新的空间并且符合新的大小要求。

2))会把原来空间的数据拷贝一份到新的空间。

3))释放旧的空间

4))返回新的内存空间的起始地址。

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

要扩展内存就直接在原有内存之后直接追加空间,原来空间的数据不发生变化,返回的是旧的空间的地址。

由于上述两种情况,realloc函数的使用就要注意一下。

示例:

realloc函数的特殊用途:

realloc(NULL,20);//完全等价于malloc(20);

2、常见的动态内存错误

(1)对NULL指针的解引用操作

代码:

INT_MAX是一个非常大的数字:

该题存在的问题就是:不能确定p的值是否是NULL,如果是NULL的话,则不能对指针变量解引用赋值。

解决方法:

(2)动态内存忘记释放(内存泄漏)

内存泄漏:申请了动态内存,但不释放该动态内存

示例:

忘记释放不再使用的动态开辟的内存会造成内存泄漏。

切记:动态开辟的空间一定要释放,并且正确释放,即malloc和free成对出现。

其实,malloc/calloc/realloc申请的动态内存,如果不再使用,就可以使用free释放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboo+vue+mysql私人西服定制设计与实现(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

初始Python篇(2)——逻辑控制、序列

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 顺序结构 选择结构 循环结构 遍历循环-for break 和 continue 无限循环-while pass空语句 猜数字小游戏 序列 序列相…

如何管理和维护自动化测试

将测试数据、测试脚本和测试结果进行有效的管理和维护是软件测试过程中的重要任务,它直接关系到测试的质量和效率。以下是对这三个方面分别进行管理和维护的具体建议: 一、测试数据的管理和维护 1. 数据收集 来源选择:测试数据主要来源于生…

Redis 简单编写C++客户端

我们之前的学习都是通过Redis自带的命令行式的客户端来使用Redis的,我们在执行命令的时候,都是手动执行的。然而这种操作方式并不是日常开发的主要形式。 更多的时候,是使用Redis的api来实现定制化的Redis客户端程序,进一步来操作…

一场被真话包场的前端面试记录……

​ 面试官:等很久了吧,我是故意的!这不是要装的忙一点,让领导看看嘛。前端小李:看你们这公司不大,破事倒是不少!要不是到门口了,我都想回去。面试官:没错,我们…

为什么kafka处理速度这么快啊!?

Apache Kafka 是一个开源的分布式事件流平台,具有高吞吐量、可扩展性和持久性等特点。目前被广泛使用,本文将介绍kafka的组成部分、特点,并且解释为什么kafka能够快速处理。 一、基本组成部分 1. 消息(Message)&#x…

【AAOS】Android Automotive 14模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r20 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch sdk_car_x86_64-trunk_staging-eng make -j8 运行效果 emualtor Home All apps …

Nature 正刊丨镊子时钟的通用量子运算和基于ancilla的读出

01摘要 通过利用纠缠来提高测量精度是量子计量学长期追求的目标1,2。然而,在存在噪声的情况下获得量子理论允许的最佳灵敏度是一个突出的挑战,需要最佳的探测态生成和读出策略3,4,5,6,7。中性原子光学钟8是测量时间的主要系统,在纠缠产生方面…

【C++贪心 分治】1717. 删除子字符串的最大得分|1867

本文涉及知识点 贪心 分治 LeetCode1717. 删除子字符串的最大得分 给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面两种操作任意次。 删除子字符串 “ab” 并得到 x 分。 比方说,从 “cabxbae” 删除 ab ,得到 “cxbae” 。 删除子字符串"…

IEEE出版:第十二届信息系统与计算技术国际学术会议参会邀请

第十二届信息系统与计算技术国际会议(ISCTech 2024)将于2024年11月8-11日在西安举办,聚焦信息系统与计算技术领域,邀请专家学者参与交流。投稿论文将经严格审稿并出版至IEEE Xplore,支持EI等检索。会议涵盖多个主题&am…

编译cifx的驱动代码报错“netlink/cli/utils.h: No such file or directory”

ethercat编译时遇到netlink/cli/utils.h: No such file or directory 确认已安装对应的库: sudo apt-get install libnl-3-devsudo apt-get install libnl-genl-3-dev依旧编译失败,找到文件所在路径。 发现该路径在系统默认的库查找路径内 选择创建软链…

MySQL数据库操作——(2)

3 DML(数据操作) 3.1 添加数据 insert语法: 向指定字段添加数据 insert into 表名 (字段名1, 字段名2) values (值1, 值2); 全部字段添加数据 insert into 表名 values (值1, 值2, ...); 批量添加数据(指定字段) ins…

雪花啤酒:以AI数智化重新书写啤酒产业

作者|斗斗 编辑|皮爷 出品|产业家 在中国,雪花啤酒的名字刻在了每个人脑中。就像在泰山南天门,必须拿一瓶“勇闯天涯”拍照打卡一样,已经成为了一个“必选项”。 1993年,华润集团收购了沈阳雪花啤酒厂55%股份,…

挑战高薪!腾讯/华为招聘提到的PMP证书来了!

想必大家伙都知道:想要挑战高薪工作,除了要有过硬的专业能力外,不断进行自我提升也非常重要! 现在招聘中,很多与岗位匹配的证书,也被纳入了基本条件中,比如被频繁提到的PMP证书,无论…

什么是上网行为管理?一文为你揭晓答案!

在当今这个数字化时代,互联网已成为人们工作、生活和学习中不可或缺的一部分。 然而,随着网络使用的普及,如何有效管理和控制用户的上网行为成为了一个重要议题。 上网行为管理,作为一种综合性的网络安全和管理工具,正…

123-基于AD9273的64路50Msps的超声侦测FMC子卡

一、产品概述 本板卡系我公司自主研发,采用8片AD9273,实现了64路模拟信号输入采集。板卡设计满足工业级要求。可用于水声侦测、医疗超声检测等。如图 1所示: 二、板卡介绍 模拟输入:两个J30J-66连接器数字输出:FMC连接…

【AIGC】如何通过ChatGPT快速学习Java、解决bug、搞定技术解决方案(完整教程)

目录 1、快速编写代码需求:创建一个Java方法,从ftp服务器下载文件 2、解决bug3、优化代码4、自学Java新技术5、推荐技术解决方案[如何直接使用ChatGPT4o、o1、OpenAI Canvas](https://www.nezhasoft.cn/)编程功能的提升 现在真的是进入了 “编码不用手&a…

起吊机革新:协议转换器解锁安全与效率

重工起吊机设备在工业生产中扮演着至关重要的角色,但其在实际应用中面临着一系列痛点问题。这些问题不仅影响了起吊机的性能和安全性,还限制了生产效率的提升。我们自主研发的MG协议转换器能够高效解决这些痛点,同时MG协议转换器作为一种关键…

路由器概述

一、路由器的工作原理 根据路由表转发数据 二、路由表与其形成 2.1路由表 (1)概念 路由:从源主机到目的主机的转发过程路由表:路由器中维护的路由条目的集合;路由器根据路由表做路径选择 (2&#xff…

光控资本:每天股票最佳买卖时间,什么时候交易股票最好?

一般来说,炒股每天最佳的生意时刻为下午的2:30-3:00,即尾盘买入,其原因如下: 1、能逃避大盘的系统性危险 投资者在尾盘买入个股,可以更好防备大盘暴降引发的资金被套的危险。 2、削减持股时刻…