malloc与free
目录
前提须知:
malloc:
大意:
头文件:
申请空间:
判断是否申请成功:
使用空间:
结果:
整体代码:
malloc申请的空间怎么回收呢?
注意事项:
free:
前提须知:
为什么要有动态内存分配 ?
我们已经掌握的内存开辟⽅式有:
int val = 20;//在栈空间上开辟四个字节
char arr[10] = {0};//在栈空间上开辟10个字节的连续空间
- 上述开辟内存空间的特点——空间申请之后不容易调整,或者说不能够进行调整,且数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整。
- 而就算是变长数组也只是说数组的大小可以使用变量来指定,而一旦数组创建好后,依然是不能调整大小。
- 而对于申请的空间大小不能灵活的调整,C语言就给了: 动态内存管理,给程序员权限,自己申请,自己使用,使用完后,自己释放。
而开辟和释放所需要用到的函数就是malloc与free
- malloc是用来申请内存的
- free是用来释放内存的
malloc:
C语⾔提供了⼀个动态内存开辟的函数:
void* malloc (size_t size);
大意:
想要多少字节就向内存申请多少个字节, 申请成功后会返回一共空间的起始地址,开辟失败会返回空指针(NULL)。
头文件:
#include <stdlib.h>
申请空间:
malloc(10 * sizeof(int));
//申请10个整型的空间 - 40个字节
判断是否申请成功:
if (p == NULL)
{perror("malloc");return 1;
}
- 冷知识:return 0 ;表示一共主函数的结束,也表示着一个正确的返回值,而在此时的return 1;表示的是一个返回失败的意思,或是说申请空间失败。
- return 1;也可以用return 2;或者return 3;表示,只要表示return 0;就行。
因为申请成功会返回起始地址,而返回的类型是void*所以我们要进行使用的时候需要进行转化,且我们要使用这个空间时得找一个相对因的变量指针进行存放空间起始地址。
int *p = (int*)malloc(10 * sizeof(int));
使用空间:
int i = 0;
for (i = 0; i <10; i++)
{*(p + i) = i;
}for (i = 0;i < 10; i++)
{ printf("%d",p[i]);return 0;
}
- p+i表示地址,*(p+i)表示地址所指向的元素,所以这是给每个不同地址的不同的元素赋值。
- p[i]相当于*(p+i)
结果:
整体代码:
int main()
{int *p = (int*)malloc(10 * sizeof(int));if (p == NULL){perror("malloc");return 1;}int i = 0;for (i = 0; i <10; i++){*(p + i) = i;}for (i = 0;i < 10; i++){ printf("%d",p[i]);return 0;}return 0;
}
malloc申请的空间怎么回收呢?
- free回收
- 自己使用free不释放的时候,程序结束后,也会由操作系统回收
- malloc是堆区上申请内存
注意事项:
- 如果开辟成功,则返回⼀个指向开辟好空间的指针。
- 如果开辟失败,则返回⼀个 NULL 指针,因此malloc的返回值⼀定要做检查。
- 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使⽤的时候使⽤者⾃⼰来决定。
- 尽量使用free函数进行回收函数,如若使用系统回收,若申请的空间过大,或进行多次申请空间,且不使用free进行回收,系统内存空间可能会出现不够
- 如果参数 size 为0,malloc的⾏为是标准是未定义的,取决于编译器。
free:
C语⾔提供了另外⼀个函数free,专⻔是⽤来做动态内存的释放和回收的,函数原型如下:
void free (void* ptr);
free函数 只能 ⽤来释放动态开辟的内存。
- 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。
- 如果参数 ptr 是NULL指针,则函数什么事都不做。
- malloc和free都声明在 stdlib.h 头⽂件中。
int main()
{int *p = (int*)malloc(10 * sizeof(int));if (p == NULL){perror("malloc");return 1;}int i = 0;for (i = 0; i <10; i++){*(p + i) = i;}for (i = 0;i < 10; i++){ printf("%d",p[i]);return 0;}free(p);//释放p = NULL;return 0;
}
free(p);
p = NULL;
- p内存放的是申请的空间的起始位置。
- 而free只是把p指向的空间回收了。
- 而对于以上两段代码我们还得让p指针忘记申请空间的空间起始地址,不然p会变成野指针。
相关文章:
malloc与free
目录 前提须知: malloc: 大意: 头文件: 申请空间: 判断是否申请成功: 使用空间: 结果: 整体代码: malloc申请的空间怎么回收呢? 注意事项: free:…...
计算周包材,日包材用来发送给外围系统
文章目录 1 Introduction2 code 1 Introduction In this example We get data from BOM and RESB . and calculate it . 2 code TYPES: BEGIN OF TY_ZPPT_0015_W,AUFNR TYPE ZPPT_0015-AUFNR,ZXH TYPE ZPPT_0015-ZXH,ZZJHID TYPE ZPPT_0015-ZZJHID,ZRJHID TYPE Z…...
R语言柱状图直方图 histogram
柱状图简介 柱状图也叫直方图,是展示连续性数值的分布状况。在x轴上将连续型数值分为一定数量的组,y轴显示对应值的频数。 R基本的柱状图 hist 我们用R自带的Orange数据来画图。 > head(Orange)Tree age circumference(圆周长) 1 1 118 …...
Linux磁盘管理:最佳实践
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
uni-app:通过三目运算动态增加样式效果(class)
效果 代码 第一条:当变量line的值等于abc时,class就等于yes,反之class等于no(显然等于abc,执行yes,前景色为红色) 第一条:当变量line1的值等于abc时,class就等于yes,反之class等于noÿ…...
API安全
1 API的简介 API代表应用程序编程接口,它由一组允许软件组件进行通信的定义和协议组成。作为软件系统之间的中介,API使软件应用程序或服务能够共享数据和功能。但是API不仅仅提供连接基础,它还管理软件应用程序如何被允许进行通信和交互。API控制程序之间交换请求的类型、请…...
手写一个翻页功能
最近在对接海康摄像头,需要写一个翻页得功能,于是乎就想到了手写,然后就记录一下。在vue项目里写的 <img:src"require()"alt""click"onNext(delete)"/><img:src"require()"alt""…...
element show-overflow-tooltip 复制
el-table-column的show-overflow-tooltip弹出的提示无法复制,官方也暂时不准备解决,可以自己模拟一个 <el-table-column label"支付单号" width"100"><template #default"{ row }"><el-tooltip :content&…...
【C语言】指针的进阶(三)—— 模拟实现qsort函数以及指针和数组的笔试题解析
目录 1、模拟实现qsort函数 1.1、qsort函数的回顾 1.2、模拟实现qsort函数 2、指针和数组笔试题解析 2.1、一维数组 2.2、字符数组 1、模拟实现qsort函数 1.1、qsort函数的回顾 要模拟实现qsort函数,就要了解清楚qsort函数的参数以及使用方式。 我们先回顾一…...
Python 图像处理库PIL ImageOps笔记
# 返回一个指定大小的裁剪过的图像。该图像被裁剪到指定的宽高比和尺寸。 # 变量size是要求的输出尺寸,以像素为单位,是一个(宽,高)元组 # bleed:允许用户去掉图像的边界(图像四个边界ÿ…...
全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一新枝——2023学生开学季辉少许
全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一新枝——2023学生开学季辉少许...
【C语言】指针的进阶(一)
目录 前言 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 前言 指针在C语言中可谓是有着举足轻重的…...
Spring学习(三):MVC
一、什么是MVC MVC(Model-View-Controller)是一种软件设计模式,用于组织和管理应用程序的代码结构。它将应用程序分为三个主要部分,即模型(Model)、视图(View)和控制器(…...
排查disabled问题之谷歌新版本特性
问题复现 最近我突然接手一个后台的bug,这个后台很久没有迭代更新了,我也不熟悉业务,所以只能看一下源码,问题很快就复现,测试的修复操作也很正确,就是因为渲染的input标签中存在disableddisabled’属性导…...
三、开发工具
开发工具 开发工具1.1.熟悉IDEA1.2.下载IDEA1.3.IDEA中文插件1.4.IDEA输出中文乱码1.5.使用IDEA —————————————————————————————————————————————————— —————————————————————————————————…...
代码解读:y.view(y.size(0), -1)---tensor张量第一维保持不变,其余维度展平
y.view(y.size(0), -1)代码解读: 用于改变PyTorch张量(tensor)y的形状的。 y.size(0)返回y的第一维的大小。 -1表示让PyTorch自动计算该维度的大小,以确保新的张量与原始张量有相同的元素数量。 功能:将y的第一维保持…...
必示科技赋能广发证券运维数字化实践案例,入选信通院《中国AIOps现状调查报告(2023)》
近期,“必示科技赋能广发证券运维数字化实践,打造智能运维数据中台”合作案例被中国信息通信研究院作为优秀金融案例项目,收录在最新的《中国AIOps现状调查报告(2023)》(金融行业仅3家)。 以必…...
特斯拉Dojo超算:AI训练平台的自动驾驶与通用人工智能之关键
特斯拉公开Dojo超算架构细节,AI训练算力平台成为其自动驾驶与通用人工智能布局的关键一环 在近日举行的Hot Chips 34会议上,特斯拉披露了其自主研发的AI超算Dojo的详细信息。Dojo是一个可定制的超级计算机,从芯片到系统全部由特斯拉自主设计…...
Linux中的一些常用命令
1.查看Linux系统中自带的GLIBC版本 ldd --version2.Linux中删除文件的命令 在Linux中,删除文件的命令是 rm。 使用 rm 命令时,请小心使用,因为它将直接删除文件,而不会将其移动到回收站。 以下是 rm 命令的一些常用选项&#…...
VRTK4⭐二.VRTK4的项目基础配置
文章目录 🟥 硬件基本配置🟧 设置XR Plug-in Management🟨 添加项目Tilia🟩 配置项目Hierarchy 🟥 硬件基本配置 解决使用OpenXR,HTC头显正常追踪,但手柄无法使用的问题. 问题如下: 当我们按照官方的标准流程配置完Op…...
word-doc和docx区别
office从业者路过。 文件结构上doc文件数据是以二进制形式存放的。 docx是以xml文件形式存放的。 doc兼容较差,docx效果更好。...
深度学习-偏导数复习
文章目录 前言1.偏导数2.偏导数概念1.对x的偏导数2.对y的偏导数3.多元函数偏导数4.如何计算偏导数1.二元函数的偏导数2.复杂函数的偏导数3.分段函数1.分界点的偏导数 5.偏导数与连续之间的关系6.偏导数的几何意义7.高阶偏导数1.定义2.高阶偏导数例题(二阶偏导数&…...
linux之jq命令
jq命令用于linux命令行对json进行处理 参数 option -r:去掉字符串的引号"例子 tt.json文件如下: [{"metric": "httpcode","tags": {"cluster": "tt","domain": "www.baidu.…...
nginx知识点详解:反向代理+负载均衡+动静分离+高可用集群
一、nginx基本概念 1. nginx是什么,做什么事情? Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强。Nginx转为性能优化而开发,能经受高负载考验。支持热部署,启动容易,运…...
powerDesigner 的基本使用
打开powerDesigner 新建 PDM(物理数据模型) 添加表字段 双击表,设置ID自增 选择导出数据库表SQL 导出成功 使用三方工具连接数据库,然后运行对应SQL文件即可 导入SQL文件数据到powerDesigner...
Java下打印一个等腰三角型
想达到这个结果,通常的做法是通过拼结两个三角型达到,但是实际上还有最右边的第三个三角型没有处理,这个拼结的方法总让人看起来有一点不完美的感觉,于是我自创了一个思路,一气合成,代码如下(本…...
HR的职业规划
CHRO可以说是HR职业发展的天花板了。CHRO对一个企业来说至关重要,是CEO的左膀右臂。那从CEO的角度来看CHRO,应该具备什么样的素质和能力,又能为公司带来什么样的价值呢? 在公司的不同发展阶段,HR部门有着不同的战略和…...
avi怎么转换成视频?
avi怎么转换成视频?在我们日常使用的视频格式中,AVI是一种常见且经常被使用的音频视频交叉格式之一。它的优点之一是占用的存储空间相对较小,但也明显存在着画质损失的缺点。虽然AVI格式的视频在某种程度上也很常见,但与最常见的M…...
爬虫数据存储:技术、策略与实践(一)
文章目录 🍋引言🍋xlrd库和xlwt库🍋创建Excel文件🍋通过Python代码向Excel写入数据🍋案例实战 🍋引言 本节主要介绍一下在使用网络爬虫技术的时候,如何将数据存储到Excel中去 🍋xl…...
【音视频】ffplay解析-音视频同步
音视频同步 主要解析:以音频为基准,让视频合成音频 思路 视频慢了则丢掉部分视频帧(视觉->画⾯跳帧) 视频快了则继续渲染上⼀帧 具体实现 一个国际标准:音频帧-视频帧时间戳的差值在-100ms~25ms内流畅 1.差值音频…...
网站首页介绍/电子商务网站建设
感觉不知道什么是VR就OUT了 其实除了VR之外,还有AR、MR、CR等外形类似 技术含量更高的头戴式设备,那么问题来了,这些*R们有哪些区别? VR(virtualreality),虚拟现实 vr是由美国VPL公司创建人拉尼尔(Jaron…...
相册网站模板/sem分析是什么意思
正式决定从KID改到Genshi。虽然Jinja的性能的确好,但是Script风格的Web template毕竟还是不如XML风格的好看和规范。试了一下发现,Genshi与KID的差别也不是很大,迁移过来还是很方便的。Genshi是一个日文词汇“原糸(げんし…...
香港网站怎么做QQ第三方登录/写手接单平台
有种很方便的写法。typedef int *p;p pointer;这时直接把pointer带入原式中,取代p然后去掉typedef,得到的结果就是int * pointer;哈哈,这样直接替换就很直观多了。C语言语法简单,但内涵却博大精…...
网站内部seo/关键词排名点击软件怎样
废话不多说,直接进入话题 Linux上Cacti的安装 1.环境需求 cacti需要 lamp 或lnmp环境。 2.cacti前置需求软件 安装Cacti前,需要php-pdo lm_sensors net-snmp php-snmp net-snmp-utils perl-Net-Daemon perl-PlRPC perl-DBI rrdtool perl-rrdtool p…...
专业的网页设计和网站建设公司/设计公司网站
触发响应用户行为和GUI事件的操作使用信号和槽构建复杂的应用程序行为,并使用自定义事件覆盖小部件事件处理。如前所述,用户与Qt应用程序的每次交互都会生成一个事件。事件有多种类型,每一种都代表一种不同类型的交互—例如鼠标或键盘事件。发…...
白之家低成本做网站/2022最近比较火的热点话题
Spring Security OAuth2.0认证授权知识概括安全框架基本概念基于Session的认证方式Spring Security简介SpringSecurity详解分布式系统认证方案OAuth2.0Spring Cloud Security OAuth2JWT令牌Spring Security实现分布式系统授权SpringSecurity总结安全框架基本概念 什么是认证&a…...