C语言 ——— 学习并使用calloc和realloc函数

devtools/2024/9/20 7:07:41/ 标签: c语言, 学习

目录

calloc函数的功能

学习并使用calloc函数​编辑

realloc函数的功能

学习并使用realloc函数​编辑


calloc函数的功能

calloc函数的功能和malloc函数的功能类似,于malloc函数的区别只在于calloc函数会再返回地址之前把申请的空间的每个字节初始化为全0

C语言 ——— 学习并使用malloc和free函数-CSDN博客


学习并使用calloc函数

函数的参数:

size_t num:要动态开辟的空间的元素个数

size_t size:每个元素个数的大小,单位是字节

函数的返回值: 

void*:和malloc函数一样,具体再使用的时候是使用者自己强制类型转换

代码演示:

// 动态开辟10个整型变量
int* parr = (int*)calloc(10, sizeof(int));// 判断是否开辟成功
if (parr == NULL)
{perror("calloc");return -1;
}// 验证释放初始化为0
for (int i = 0; i < 10; i++)
{printf("%d ", *(parr + i));
}

 代码验证:


realloc函数的功能

realloc函数的出现使得动态内存管理更加灵活,有时候申请的空间过大或过小时,就可以使用realloc函数对动态开辟内存大小进行调整


学习并使用realloc函数

函数的参数: 

void* ptr:需要被扩容的动态开辟空间的起始位置的指针

size_t size:需要扩容的大小,单位是字节,值得注意的是:如果 ptr 现在的大小是40个字节,想要扩容到80个字节,那么在实参部分就要填入80,而不是40

函数的返回值:

void*:返回扩容后的动态空间的起始位置,同calloc,具体再使用的时候是使用者自己强制类型转换,且并不是每次都能在原地扩容

原地扩容:当需要扩容的空间后面有多余的空间时,就直接在原空间直接扩容

异地扩容:当需要扩容的空间后面没有多余的空间时,就会重新在内存中找一块地方,直接开辟好所需的空间,并将原来空间的数据拷贝到新空间,最后再释放旧空间

代码演示:

// 动态开辟10个整型变量
int* parr = (int*)malloc(sizeof(int) * 10);// 判断是否开辟成功
if (parr == NULL)
{perror("malloc");return -1;
}// 扩容到60个整型变量
parr = (int*)realloc(parr, sizeof(int) * 60);// 判断是否开辟成功
if (parr == NULL)
{perror("malloc");return -1;
}

代码验证:

未扩容前:

没有扩容前,动态开辟空间的地址是:0x013a9a48

扩容后:

地址发生了改变,变为:0x013adc98 ,说明发生了异地扩容 


http://www.ppmy.cn/devtools/97231.html

相关文章

STM32 HAL库常用功能封装

关中断 /*** brief 关闭所有中断(但是不包括fault和NMI中断)* param 无* retval 无*/ void sys_intx_disable(void) {__ASM volatile("cpsid i"); }开中断 /*** brief 开启所有中断* param 无* retval 无*/ void sys_intx_enabl…

【MATLAB机器人系统工具箱】【manipulatorRRT规划器】属性和方法解析

启用了连接启发式&#xff08;heuristic&#xff09;后&#xff0c;双向快速扩展随机树&#xff08;RRT&#xff09;算法会在以下情况下忽略 MAXCONNECTIONDISTANCE 的限制&#xff1a;当两棵树&#xff08;起始树和目标树&#xff09;之间的节点距离足够接近时&#xff0c;算法…

计算机Java项目|基于SpringBoot的大学生一体化服务平台的设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

【1】开源!移植OpenHarmony轻量系统到雅特力AT32F437ZMT MCU

笔者最近将OpenHarmony轻量系统移植到AT32F437 MCU&#xff0c;移植架构采用Board与SoC分离方案&#xff0c;使用arm gcc工具链Newlib C库&#xff0c;并且提供了相应的样例应用代码&#xff08;样例代码持续更新中&#xff09; 移植 基于雅特力科技官方开发板 AT-START-F437 …

flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案

flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案 一、背景二、分析tmp文件三、定位原因四、解决方法一、背景 flume没有关闭生成的tmp文件临时解决方案是批量关闭tmp文件下一步深入定位分析原因二、分析tmp文件 观察tmp文件,发现tmp文件的时间点…

Linux Bridge VLAN

一、Linux Bridge VLAN &#xff08;1&#xff09;是什么&#xff1f; Bridge 是什么 VLAN 是什么 LINUX BRIDGE VLAN又是什么&#xff1f;——> &#xff08;2&#xff09;解决什么问题&#xff1f;【应用场景】 应用背景 已一个实际问题引出 【应用场景】&#xff1a; 【…

武汉流星汇聚:西班牙时尚消费高涨,中国商家借亚马逊平台拓商机

在2024年第二季度的亚马逊西班牙站&#xff0c;一场前所未有的时尚盛宴正悄然上演。销售额同比高增长TOP10品类榜单的揭晓&#xff0c;不仅揭示了西班牙消费者对于时尚品类的狂热追求&#xff0c;更为亚马逊平台上的中国商家开启了一扇通往新蓝海的大门。其中&#xff0c;男士拳…

SSH协议与OpenSSH配置详解(配置密钥对验证实验)

文章目录 SSH 协议与 OpenSSH 配置详解1. SSH 协议概述2. OpenSSH 概述3. 配置SSH&#xff08;sshd_config文件&#xff09;3.1 配置服务监听选项3.2 配置用户登录控制&#xff08;黑白名单&#xff09;3.3 配置登录验证方式&#xff08;密钥对验证&#xff09;3.4 常用的配置项…

PHP中如何限制PDF文件大小的简单示例

例如&#xff0c;如果我们希望限制PDF文件的大小不超过5MB&#xff0c;我们可以将这两个配置项都设置为5M。 upload_max_filesize 5M post_max_size 5M接下来&#xff0c;在PHP脚本中&#xff0c;我们可以通过检查$_FILES全局数组来获取上传文件的大小&#xff0c;并作出相应…

【5.0】vue请求函数和路由

【5.0】vue请求函数和路由 此处是与后端交互发送请求拿到数据&#xff0c;和vue自己中的页面跳转路由 【一】axios使用 【1】安装 终端命令 npm install axios -S【2】基本语法 axios.get(后端地址&#xff08;django&#xff09;).then(res > {console.log(res.data.res…

ArrayList详解

简介 【概述】 List的主要实现类&#xff0c;底层使用Object[]存储&#xff0c;适用于频繁的查找工作&#xff0c;线程不安全。 【特点】 增删慢&#xff1a;每次删除元素&#xff0c;都需要更改数组长度、拷贝以及移动元素位置&#xff1b;查询快&#xff1a;由于数组在内…

SSM学生社团管理系统—计算机毕业设计源码20360

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…

YouTube最好用的翻译插件

相信很多同学和我一样&#xff0c;想看YouTube视频时发现基本上都说英文&#xff0c;以我的英文水平&#x1f923;去观看真是一言难尽&#xff0c;所以就想着看能不能在谷歌浏览器上找一个插件来进行翻译&#xff0c;结果还真让我找到了一个不错的Youtube翻译插件&#xff0c;它…

AI大模型高效题库生成:业务人效提升的强大助力

一 现状问题 1、培训考核涉及的文件数量较多 当前&#xff0c;京东航空公司维修部门面临着人员规模的快速增长和持续的培训需求。根据民航局的规定&#xff0c;维修培训必须确保所有维修人员都能够完成对飞机维修相关文件的学习&#xff0c;这包括维修方案、维修工程管理手册…

Anaconda环境迁移之conda pack

目录 1. conda pack安装2. 环境打包3. 拷贝环境包到目标电脑4. 激活环境5. 大功告成 1. conda pack安装 源电脑安装conda pack conda install conda-pack2. 环境打包 假如环境名为test&#xff0c;那么打包命令如下&#xff1a; conda pack -n test -o test.tar.gz打包后的…

使用Python+MoviePy给视频添加字幕或水印

一、使用CompositeVideoClip将使用TextClip创建文字类与视频叠加在一起&#xff0c;给视频添加字幕或水印 from moviepy.editor import *# 从本地载入视频myHolidays.mp4&#xff0c;并截取00:00:50 - 00:00:60部分 clip VideoFileClip("/home/Download/Mojito.mp4"…

如果忘记了 Apple ID 密码,如何重设

“我忘记了我的 Apple ID 密码&#xff0c;如何恢复我的帐户&#xff1f;”为了方便用户&#xff0c;Apple 允许每个人使用唯一的 Apple ID 和密码激活设备并访问所有 Apple 服务。然而&#xff0c;实际上&#xff0c;手动选择某项并忘记它似乎很容易。例如&#xff0c;许多 Ap…

带你速通C语言——指针(10)

指针是C语言中最强大但也最容易引起困惑的概念之一。它们直接关联内存管理&#xff0c;使得程序员可以高效地操作数据和内存。下面我将尽量以简单明了的方式介绍指针的基本概念。 1.指针基础 指针本质上是存储内存地址的变量&#xff0c;这个地址指向一个值。通过指针&#xf…

Vue中调整组件的高度及其他样式

在Vue组件中&#xff0c;如果想让一个组件如<MapContainer />变长&#xff0c;你可以使用CSS来调整它的高度。以下是一些可能的方法&#xff1a; 设置固定高度&#xff1a;直接给<MapContainer />组件设置一个高度值。 .MapContainer {height: 300px; /* 你可以根据…

论文中绘制神经网络工具汇总

论文中绘制神经网络工具汇总_convnetdraw-CSDN博客 这哥们总结的还是比较全面的&#xff01;