当前位置: 首页 > news >正文

malloc与free函数的用法(精简全面 · 一看即懂)

前言:Hello大家好😘,我是心跳sy,今天为大家带来malloc函数与free函数的用法,我们一起来看看吧!

目录

一、malloc函数 💫

1、⭐️malloc函数对应的头文件⭐️

2、⭐️malloc函数的作用⭐️

3、⭐️malloc函数的参数与使用⭐️

二、free函数 💫

1、⭐️free函数对应的头文件⭐️

2、⭐️free函数的作用⭐️

3、⭐️free函数的参数及使用⭐️

⭐️场景设想:我们在编写代码时经常会遇到这样一种情况:我们无法预知确定某些数据结构的大小,比如将一串整数输入到一个数组之中,我们无法得知将要输入多少个整数,比如需要输入n个数据,数组的大小只能在程序运行过程时才能确定,怎么办呢❓

💫这时就需要调用malloc函数为这个数组分配动态的内存空间,这部分空间来自进程地址中的堆段,用完之后需要调用free释放。

👉我们看一个小例子:

#include<stdlib.h>
#include<stdio.h>
//动态分配内存并读取用户输入的整数
int main()
{int* array, i, n;scanf("%d", &n);array = (int*)malloc(sizeof(int) * n);for (i = 0; i < n; i++){scanf("%d", &array[i]);}free(array);return 0;
}

🌈解释:这段代码控制输入 n 个整数,根据要输入的个数来动态分配内存,使用 malloc() 函数动态分配了一个包含 n 个整数的数组,返回值是一个指向整数的指针 (int*),将其赋值给 array ;for 循环用于遍历数组 array,从标准输入中读取 n 个整数,将其存储到数组 array 的第 i个元素中;最后使用 free()函数释放动态分配的内存,避免内存泄漏。

一、malloc函数 💫

 

1、⭐️malloc函数对应的头文件⭐️

👉malloc函数对应的头文件是stdlib.h,许多的c编译器也支持使用malloc.h,两种都可以使用,但为了确保代码的可移植性和兼容性,我们还是推荐使用stdlib.h

2、⭐️malloc函数的作用⭐️

👉可动态申请一段空间 ,分配一块大小为 size 字节的内存块,并返回该块的起始地址的指针

3、⭐️malloc函数的参数与使用⭐️

👉在上图中,我们可以看到malloc函数的原型为 void* malloc (size_t size),首地址返回void*,我们可以将其转换成任意类型去使用,比如我们代码中返回了(int*),函数参数为要申请的字节数,比如:

int* p = (int*)malloc(sizeof(int) * 4);

⭕️int类型是4字节,代码意为申请4个int类型的空间,共分配4*4=16字节

⚠️注意malloc函数分配的是一段连续的空间,所以呢我们可以把这个一维空间当成数组去使用,例如我们上面给出的代码所示。

⭕️在实际编写代码中,我们在分配好地址后,常常需要验证地址空间是否分配好了,需要判断一下:

int* p = (int*)malloc(sizeof(int) * 10);
if (p == NULL)
{printf("动态内存分配失败!");return 0;
}

二、free函数 💫

1、⭐️free函数对应的头文件⭐️

👉仍然是 stdlib.h,与malloc函数一致。

2、⭐️free函数的作用⭐️

👉释放内存块,通过调用 malloc、calloc 或 realloc 分配的内存块释放,使其可以再次用于其他分配。

3、⭐️free函数的参数及使用⭐️

👉参数是void*类型的指针,也就是我们上方malloc申请的那块空间的首地址传进去,就可以进行释放了,如下:

free(p);

⚠️注意:free函数用于释放我们的三兄弟函数:malloc、calloc 或 realloc ,它们之间成对出现,如:一个malloc下面必须有一个对应的free✔

🔴如果 ptr 指针不是用上述三兄弟函数分配的内存块,则会导致未定义的行为!

🔴如果 ptr 是一个空指针,则函数不执行任何操作

🔴释放完空间之后,空间释放掉了,但是地址值还在p里保存着,我们通常置指针为空,防止野指针的产生,即

free(p);
p = NULL;

👉关于calloc函数和realloc函数的知识我们在下期文章为大家带来,感谢大家花费宝贵的时间阅读本文章,制作不易,希望大家多多支持呀😘😘😘,如有任何问题欢迎各位大佬在评论区批评指正!!!

 

相关文章:

malloc与free函数的用法(精简全面 · 一看即懂)

前言&#xff1a;Hello大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;今天为大家带来malloc函数与free函数的用法&#xff0c;我们一起来看看吧&#xff01; 目录 一、malloc函数 &#x1f4ab; 1、⭐️malloc函数对应的头文件⭐️ 2、⭐️malloc函数的作用⭐️ 3…...

强制升级最新系统,微软全面淘汰Win10和部分11用户

说出来可能不信&#xff0c;距离 Windows 11 正式发布已过去整整三年时间&#xff0c;按理说现在怎么也得人均 Win 11 水平了吧&#xff1f; 然而事实却是&#xff0c;三年时间过去 Win 11 占有率仅仅突破到 29%&#xff0c;也就跳起来摸 Win 10 屁股的程度。 2024 年 6 月 Wi…...

java-命令行连接 mysql

在 Java 中&#xff0c;通过命令行连接 MySQL 可以使用以下步骤。假设您已经安装并配置了 MySQL 5.7。 ### 一、通过命令行连接 MySQL #### 1. 打开命令行终端 在不同的操作系统上打开命令行终端的方式&#xff1a; - **Windows**&#xff1a;按 Win R 键&#xff0c;输入…...

RK3588部署YOLOV8-seg的问题

在使用YOLOV8-seg训练出来的pt模型转为onnx的时候&#xff0c;利用以下仓库地址转。 git clone https://github.com/airockchip/ultralytics_yolov8.git 在修改ultralytics/cfg/default.yaml中的task&#xff0c;mode为model为自己需要的内容后&#xff0c; 执行以下语句 cd …...

Python Linux下编译

注意 本教程针对较新Linux系统&#xff0c;没有升级依赖、处理旧版本Linux的openssl等步骤&#xff0c;如有需要可以查看往期文章&#xff0c;例如&#xff1a;在Centos7.6镜像中安装Python3.9 教程中没有使用默认位置、默认可执行文件名&#xff0c;请注意甄别 安装路径&#…...

SpringMVC(3)——SpringMVC注解实战

前言 SpringMVC&#xff08;2&#xff09;——controller方法参数与html表单对应&#xff08;请求参数的绑定&#xff09; 上篇博客我们提到了controller方法的参数与html表单之间的对应关系 但是这种对应关系有很多缺点&#xff1a; 传递参数只能放在request的body当中&am…...

统信UOS上批量安装惠普打印驱动后启动器没有图标的解决方法

原文链接&#xff1a;统信UOS上批量安装惠普打印驱动后启动器没有图标的解决方法 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS上批量安装惠普打印驱动后启动器没有设置图标的解决方法的文章。批量安装打印驱动是企业和个人用户常见的操作&#xff0…...

Python UDP编程之实时聊天与网络监控详解

概要 UDP(User Datagram Protocol,用户数据报协议)是网络协议中的一种,主要用于快速、简单的通信场景。与TCP相比,UDP没有连接、确认、重传等机制,因此传输效率高,但也不保证数据的可靠性和顺序。本文将详细介绍Python中如何使用UDP协议进行网络通信,并包含相应的示例…...

LiveNVR监控流媒体Onvif/RTSP用户手册-用户管理:编辑、添加用户、关联通道、重置密码、删除、过滤搜索

LiveNVR监控流媒体Onvif/RTSP用户手册-用户管理:编辑、添加用户、关联通道、重置密码、删除、过滤搜索 1、用户管理1.1、添加用户1.2、关联通道1.3、重置密码1.4、编辑1.5、删除1.6、过滤搜索 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、用户管理 1.1、添加用户 点击用户管理…...

SpringBoot新手快速入门系列教程十:基于Docker Compose,部署一个简单的项目

前述&#xff1a; 本篇教程将略过很多docker下载环境配置的基础步骤&#xff0c;如果您对docker不太熟悉请参考我的上一个教程&#xff1a;SpringBoot新手快速入门系列教程九&#xff1a;基于docker容器&#xff0c;部署一个简单的项目 使用 Docker Compose 支持部署 Docker 项…...

websocket中的STOMP 协议:sockjs-client 和 stompjs

文章目录 一、简介二、安装三、创建 webSocket.ts四、页面中使用一、简介 使用 WebSockets 进行实时通信时,一种常见的实现方式是使用 STOMP 协议。STOMP(Simple Text Oriented Messaging Protocol)是一种轻量级的协议,通常用于客户端和消息代理之间的通信,如 WebSockets…...

阿里云API安全2.0全新发布

阿里云安全发布API防护产品已将近三年&#xff0c;为客户提供API资产全生命周期监控管理&#xff0c;发现和管理业务中存在的全量API接口资产&#xff0c;并提升API接口在数据流转过程中的安全性&#xff0c;现已全面覆盖OWASP提出的API TOP 10安全风险。 近期&#xff0c;阿里…...

学习网络的第一步:全面解析OSI与TCP/IP模型

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello,大家好!我是你们的好朋友小米。今天我们来聊一聊网络基础知识中的重量级选手——OSI模型和TCP/IP模型!网络的世界就像一个巨大的迷宫,而这两个…...

鸿蒙语言基础类库:【@ohos.util (util工具函数)】

util工具函数 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 该模块…...

CVPR`24 | 又快又好!渲染速度比ENeRF快30倍!4K4D:实时4K分辨率4D视图合成

文章链接&#xff1a;https://arxiv.org/pdf/2310.11448 git链接&#xff1a; https://zju3dv.github.io/4k4d/ 本文旨在实现动态3D场景在4K分辨率下的高保真和实时视图合成。最近&#xff0c;一些动态视图合成方法在渲染质量方面表现出色。然而&#xff0c;在渲染高分辨率图像…...

中关村软件园发布“数据合规与出境评估服务平台”

在2024中关村论坛年会期间&#xff0c;中关村软件园发布“数据合规与出境评估服务平台”。该平台是中关村软件园结合北京市“两区”建设&#xff0c;立足软件园国家数字服务出口基地和数字贸易港建设&#xff0c;围绕园区内外部企业用户的业务合作、科研创新、跨国运营等场景需…...

记一次若依框架和Springboot常见报错的实战漏洞挖掘

目录 前言 本次测实战利用图​ 1.判段系统框架 2.登录页面功能点测试 2.1 弱口令 2.2 webpack泄露信息判断 2.3 未授权接口信息发现 3.进一步测试发现新的若依测试点 3.1 默认弱口令 3.2 历史漏洞 4.访问8080端口发现spring经典爆粗 4.1 druid弱口令 4.2 SwaggerU…...

Idea合并Git分支信息

#git 的笔记 ##本篇文章是通过Idea 实现git 命令操作的代码的上传与合并。 1.合并分支 点击 Git 选择Merge 这里选择合并远程的分支...

【学习css2】grid布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…...

Django 表单

Django 表单 Django 表单是 Web 开发中不可或缺的一部分,它允许用户与网站进行交互,如提交数据、上传文件等。在 Django 框架中,表单功能非常强大,支持各种自定义和验证,使得开发者能够轻松地处理用户输入。本文将详细介绍 Django 表单的使用方法,包括创建表单、表单字段…...

1688代采系统开发避坑指南:经验之谈

做跨境代购系统三年了&#xff0c;技术栈换过一次。今天把当初的技术选型过程和踩坑经验整理出来。多页面架构&#xff08;MPA&#xff09;的选择&#xff1a;没有用 React/Vue SPA 做租户端前台的首页和商品页&#xff0c;而是传统的多页面&#xff08;HTML JS jQuery&#…...

昇腾CANN asc-tools:NPU 运维诊断工具的实战手册

asc-tools 是 CANN 的运维诊断工具包——不在开发阶段用&#xff0c;在部署和运维阶段用。NPU 集群跑了几个月突然性能下降、某张卡频现 ECC 错误、推理延迟从 50ms 涨到 200ms——这些生产环境的问题&#xff0c;asc-tools 帮你定位。 asc-tools 包含哪些工具 asc-tools/ ├─…...

Gemini模型训练数据合规性审查清单(含原始数据来源验证、合法基础映射表、数据血缘图谱工具推荐)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini模型训练数据合规性审查总览 Gemini系列大语言模型的训练数据来源广泛&#xff0c;涵盖公开网页、学术文献、代码仓库及多语种图书资源。为确保其符合全球主要司法辖区的数据治理要求&#xff08…...

轮式机器人里程计误差分析与精度提升实战指南

1. 项目概述&#xff1a;从轮子转动到空间定位轮式移动机器人&#xff0c;无论是工厂里的AGV小车、仓库里的分拣机器人&#xff0c;还是家用的扫地机器人&#xff0c;它们要完成自主移动&#xff0c;第一个要回答的哲学问题就是&#xff1a;“我在哪&#xff1f;” 而里程计&am…...

RTX51实时系统中os_wait延时问题与解决方案

1. RTX51实时系统中的os_wait延时问题解析在嵌入式开发领域&#xff0c;RTX51作为经典的实时操作系统内核&#xff0c;广泛应用于8051系列微控制器的任务调度。最近我在调试一个需要精确延时的项目时&#xff0c;遇到了一个看似简单却容易踩坑的问题&#xff1a;os_wait(K_TMO,…...

【NotebookLM效应量计算实战指南】:20年统计学专家亲授3大避坑法则与5步精准计算流程

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;NotebookLM效应量计算的核心概念与适用场景 NotebookLM 是 Google 推出的基于用户上传文档进行语义理解与推理的实验性 AI 工具。其“效应量计算”并非内置统计模块&#xff0c;而是指用户在利用 NotebookLM 对…...

AI、机器学习与深度学习的本质区别与选型指南

1. 这不是概念辨析课&#xff0c;而是一张能让你少走三年弯路的“技术地图”我带过三十多个从零起步转行做数据工作的学员&#xff0c;几乎每个人在刚接触这个领域时&#xff0c;都会被这三个词绕晕&#xff1a;AI、机器学习、深度学习。有人翻了十页维基百科&#xff0c;越看越…...

并发数据结构设计与无锁编程实践

1. 并发数据结构的设计挑战与解决方案在现代多线程编程中&#xff0c;并发数据结构的设计一直是个棘手的问题。想象一下&#xff0c;你正在管理一个繁忙的机场控制塔&#xff0c;多架飞机同时请求降落许可&#xff0c;而你必须确保每架飞机都能安全降落&#xff0c;不会发生冲突…...

成都制造企业电费越来越高,AI能耗异常预警该先接哪些数据?

一、电费上涨&#xff0c;先别只看总表对成都不少制造企业来说&#xff0c;电费已经不只是后勤费用&#xff0c;而是影响订单毛利、交付节奏和产线管理的一项经营变量。问题在于&#xff0c;许多企业发现电费升高时&#xff0c;第一反应仍然停留在“今年产量多了”“设备老了”…...

给老系统装一层 “能办事的 AI”:企业 Agent 卡住的最后一步,SkillsUI 想补上

让我们从一个所有做企业 Agent 的人都遇到过的具体场景说起。某券商风控员要给客户开通融资融券账户&#xff0c;传统流程是这样的&#xff1a;登录 OA 提风控审批 → 跳到 CRM 拉客户资料 → 跳到风控系统填评估表 → 跳到电子签平台发签约链接 → 回 OA 关单。十几个字段反复…...