70.【C语言】动态内存管理(重点)(3)

本文为数据结构打下基础

备注:数据结构需要掌握指针,结构体和动态内存管理

承接69.【C语言】动态内存管理(重点)(2)文章

目录

4.calloc函数

cplusplus网的翻译

提炼要点

使用

5.recalloc函数

使用说明

作用

调整内存空间的几种情况

1.原有空间之后有足够大的空间

2.原有空间之后没有足够大的空间

建议 

代码

 用recalloc函数来实现malloc函数

推荐阅读


4.calloc函数

cplusplus网站的介绍,点我跳转

cplusplus网的翻译

函数

calloc


void* calloc (size_t num, size_t size);

为含num个元素的数组分配内存块,每个元素有size个字节长,并且把他们的所有位初始化为0

实际结果是分配了一个num*size字节的初始化内存块,内存块的每个位为0

如果size为0,返回值依靠特定的库来实现,它可能是也可能不是一个空指针(即不确定是什么类型的指针,因为C标准没有定义),但返回的指针不应被解引用

参数


num:需要分配的num个元素

size:每个元素的大小(备注:size个字节)

size_t是无符号整型

返回值


成功时,指向内存块的指针被函数分配

指针的类型总为void*,它可以被转换为所需的数据指针类型以便解引用

如果函数不能为请求的内存块分配,则返回一个空指针

提炼要点

1.函数的功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0

2.与malloc函数(具体见68.【C语言】动态内存管理(重点)(上))的区别只在于calloc函数会在返回地址之前把申请的空间的每个字节初始化为全0

3.使用malloc函数前加#include <stdlib.h>

4.养成良好习惯,判断是否为空指针

使用

#include <stdio.h>
#include <stdlib.h>
int main()
{int*p=(int*)calloc(10,sizeof(int));if (p == NULL){perror("calloc");return 1;}//使用int i = 0;for (i = 0; i < 10; i++)printf("%d ", *(p + i));//释放free(p);p = NULL;return 0;
}

int*p=(int*)calloc(10,sizeof(int));如果以int形式开辟空间要用sizeof(int);即开辟10个4字节

int*p=(int*)calloc(10,sizeof(int));改为int*p=(int*)malloc(10*sizeof(int));

因为没有初始化为0,而在内存中的字节数组为cd cd cd cd cd cd cd cd......

5.realloc函数

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

使用说明

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

2.size调整之后新大小

3.返回值为调整之后的内存起始位置

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

作用

为了合理的使用内存,可以对内存的大小做灵活的调整

调整内存空间的几种情况

1.原有空间之后有足够大的空间

此时直接在原有空间之后增大空间

2.原有空间之后没有足够大的空间

此时realloc函数按4步处理

1.在堆空间上找到新满足大小的连续空间

2.将旧空间的数据迁移到新空间

3.旧空间的内容被释放

4.返回新空间的地址

建议 

1.在第4步时,建议不要用原来的指针来接收新空间的地址,如果开辟新空间失败,则会返回空指针,

一旦原来的指针被赋为空指针,则原来的指针数据会被丢失

2.释放内存空间)(free(p);)时建议为p置NULL

代码

#include <stdio.h>
#include <stdlib.h>
int main()
{int*p=(int*)malloc(10);if (p == NULL){perror("mcalloc");return 1;//开辟失败,错误返回}//使用......//扩大为20个字节int* r_p=(int*)realloc(p, 20);//新设一个r_p(全称realloc_pointer)指针,if (r_p != NULL){p = r_p;}else{perror("realloc");return 1;//错误返回}//最后释放空间free(p);p = NULL;return 0;
}

 用realloc函数来实现malloc函数

将recalloc函数的第一个参数设为NULL就等同malloc函数

realloc(NULL,5);等同于malloc(5);

推荐阅读

68.【C语言】动态内存管理(重点)(1)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动猫砂盆是养猫新型智商税吗?测评2024年热门款智能猫砂盆分享

铲屎官们只要一察觉到猫主子拉屎&#xff0c;就要马上去铲掉&#xff0c;这不仅是为了猫砂盆中其他干净的猫砂&#xff0c;更是为了防止猫屎残留发臭&#xff0c;特别是便便这种东西&#xff0c;一旦放久了就很招虫子&#xff0c;家里出现这些虫子又要大扫除消杀&#xff0c;特…

使用Python接口自动化测试post请求和get请求,获取请求返回值

引言 我们在做python接口自动化测试时&#xff0c;接口的请求方法有get,post等&#xff1b;get和post请求传参&#xff0c;和获取接口响应数据的方法&#xff1b; 请求接口为Post时&#xff0c;传参方法 我们在使用python中requests库做接口测试时&#xff0c;在做post接口测试…

论文精读:基于概率教师学习的跨域自适应目标检测(ICML2022)

原文标题&#xff1a;Learning Domain Adaptive Object Detection with Probabilistic Teacher 中文标题&#xff1a;基于概率教师学习的域自适应目标检测 代码地址&#xff1a; GitHub - hikvision-research/ProbabilisticTeacher: An official implementation of ICML 2022 p…

计算机网络——ftp

在网络通信中&#xff0c;控制连接和数据连接是两种不同类型的连接&#xff0c;它们各自具有特定的功能和用途。 一、控制连接 定义与功能&#xff1a; 控制连接主要用于在通信双方之间传输控制信息&#xff0c;以建立、维护和终止数据连接。它负责协调和管理数据传输的过程&am…

图像数据增强库综述:10个强大图像增强工具对比与分析

在深度学习和计算机视觉领域&#xff0c;数据增强已成为提高模型性能和泛化能力的关键技术。本文旨在全面介绍当前广泛使用的图像数据增强库&#xff0c;分析其特点和适用场景&#xff0c;以辅助研究人员和开发者选择最适合其需求的工具。 数据增强的重要性 数据增强在深度学习…

架构设计笔记-7-系统架构设计基础知识

目录 知识要点 单选 案例分析 1.质量属性 / 管道过滤器 / 数据仓库风格 2.面向对象风格 / 控制环路风格 3.软件架构风格 / 架构风格选择 4.体系结构方案对比 5.面向对象风格 / 基于规则风格 6.解释器风格 / 管道过滤器风格 7.面向对象风格 / 解释器风格 8.软件架构复…

直击工博会 | 万物集与四大供应商强强联手,开启战略合作新纪元!

9月24日&#xff0c;第24届中国国际工业博览会在国家会展中心&#xff08;上海&#xff09;开幕。本届工博会设置数控机床与金属加工展、工业自动化展、节能与工业配套展、新一代信息技术与应用展等9大专业主题展&#xff0c;吸引28个国家和地区2600家企业参展。万物集作为参展…

Canal 扩展篇(阿里开源用于数据同步备份,监控表和表字段(日志))

1.Canal介绍 Canal把自己伪装成从数据库&#xff0c;获取mysql主数据库的日志&#xff08;binlog&#xff09;信息&#xff0c;所以要想使用canal就得先开启数据库日志 https://github.com/alibaba/canal Canal 主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量…

影刀RPA在智能客服上的运用

随着人工智能技术的不断发展&#xff0c;智能客服系统逐渐成为企业提升服务效率和质量的重要工具。影刀RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;作为一种模拟人类用户行为的技术&#xff0c;通过自动化执行重复性高、规则明确的任务…

1. Oracle 安装报错——环境变量过长

文章目录 1. 报错详细信息2. 解决方案2.1 方案一&#xff1a;修改配置文件cvu_prereq.xml2.2 方案二&#xff1a;修改环境变量配置 1. 报错详细信息 安装 Oracle 过程中&#xff0c;在执行 “先决条件检查” 时报错&#xff1a; 报错内容&#xff1a; This test checks wheth…

163页PPT罗兰贝格品牌战略升级:华为案例启示与电器集团转型之路

罗兰贝格作为一家全球顶级的战略管理咨询公司&#xff0c;其品牌战略升级理念在多个行业中得到了广泛应用。以下将以华为案例为启示&#xff0c;探讨电器集团的转型之路&#xff0c;并融入罗兰贝格品牌战略升级的思想。 一、华为案例的启示 华为与罗兰贝格联合撰写的《数据存…

MySQL【知识改变命运】03

表的基本操作 1&#xff1a;查看所有表2&#xff1a;创建表3&#xff1a;查看表结构4&#xff1a;修改表5&#xff1a; 删除表 前言&#xff1a;我们先了解一个知识&#xff1a; MySQL安装后会有MySQL服务——管理多个库——每个库管理多个表——每个表管理多行数据——数据行由…

鲁班到家上门安装维修系统源码开发之结构功能解析

随着物联网和智能家居的普及&#xff0c;消费者对便捷、高效的生活方式需求日益增加。鲁班到家作为一款专注于家居安装维修服务的平台&#xff0c;凭借其多渠道预约、智能派单、在线支付与费用明细透明等优势&#xff0c;在市场上赢得了广泛认可。本文将详细解析鲁班到家上门安…

【Unity踩坑】UWP项目安装包认证失败

问题&#xff1a;在Unity导出的VS项目&#xff0c;打包生成appx后&#xff0c;进行应用认证时失败。提示部分API不支持。 API __C_specific_handler in kernel32.dll is not supported for this application type. UnityPlayer.dll calls this API.API DXGIGetDebugInterface1 …

操作系统 | 学习笔记 | 王道 | 4.3 文件系统

4.3 文件系统 4.3.1 文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 用一个例子来辅助记忆文件系统的层次结构&#xff1a; 假设某用户请求删除文件"D:/工作目录/学生信息.xIsx"的最后100条记录。 用户需…

MongoDB集群模式详解及应用实战

目录 本节课内容&#xff1a; 集群搭建 1.创建3个目录&#xff1a; 2.编辑配置文件 ​编辑 3.启动&#xff1a; 4.看看&#xff1a; 5.另外&#xff0c;两个如上1&#xff0c;2&#xff0c;3步骤操作 &#xff0c;但是日志目录&#xff0c;端口什么的需要改一下即可。 …

[稳定检索|投稿优惠]2024年材料科学、能源技术与智能制造国际会议(MSETIM 2024)

2024年材料科学、能源技术与智能制造国际会议 2024 International Conference on Materials Science, Energy Technology, and Intelligent Manufacturing 【1】大会信息 会议名称&#xff1a;2024年材料科学、能源技术与智能制造国际会议 会议简称&#xff1a;MSETIM 2024 大会…

Python虚拟环境打包

一、环境配置文件 1.控制台输入&#xff0c;生成requirements.txt文件&#xff0c;根据此文件可进行环境安装 pip freeze > requirements.txt # 生成配置文件 pip install -r requirements.txt # 根据配置文件安装环境 可能会存在环境冲突&#xff0c;原因未知。 二、环…

ASP.NetCore---I18n(internationalization)多语言版本的应用

文章目录 0.实现的效果如下1.创建新项目I18nBaseDemo2.添加页面中的下拉框3.在HomeController中添加ChangeLanguage方法4.在Progress.cs 文件中添加如下代码&#xff1a;5. 在progress.cs中添加code6.添加Resource资源文件7.在页面中引用i18n的变量8. 重启项目&#xff0c;应该…

【深度学习总结】热力图-Grad-CAM使用

Grad-CAM使用 介绍 Grad-CAM&#xff0c;全称为Gradient-weighted Class Activation Mapping&#xff0c;是一种用于深度学习模型可视化的技术&#xff0c;特别是在卷积神经网络&#xff08;CNN&#xff09;中。它通过生成热力图来展示模型在做出决策时关注的区域&#xff0c…