内存泄漏的原因有哪些 malloc函数的功能及用法盘点
内存泄漏的原因
2.1 C语言内存分配情况
在C语言中,根据数据在内存中存在的时间(生存周期)不同,将内存空间分为三个区:
1)程序区:用于存储程序的代码,即程序的二进制代码。
2)静态存储区:用于存储全局变量和静态变量,这些变量的空间在程序编译时就已经分配好了。
3)动态存储区:用于在程序执行时分配的内存,又分为:堆区(heap)和栈区(stack)。堆区:用于动态内存 分配,程序运行时由内存分配函数在堆上分配内存。在C语言中,只能使用指针才能动态的分配内存。栈区:在 函数执行时,函数内部的局部变量和函数参数的存储单元的内存区域,函数运行结束时,这些内存区域会自动释 放。
2.2 C语言动态内存分配
在C语言中用内存分配函数来实现内存的动态分配,这些函数有:malloc()和realloc()等函数。malloc():使用这个 函数时需要包含头文件。使用该函数需要指定要分配的内存字节数作为参数,例如:
int *pNumber=(int *) malloc(100)
这条语句分配了100个字节的内存,并把这个内存块的地址赋给pNumber,这个内存块可以保存最大25个int值, 每个int占4个字节。如果不能分配请求的内存,malloc()会返回一个null指针。
2.3 释放动态分配的内存
堆上分配的内存会在整个应用程序结束之后,由操作系统负责回收,但最好是在使用完这些内存后立即释放。如 果不释放,会引起内存泄漏,极大占用系统资源,可能会产生各种未知的错误。所以,必须使用free()函数释 放内存,参数是内存地址(指针),例如:free(pNumber),依上例。
(3)内存泄漏避免的方法
3.1正确使用malloc函数分配内存
malloc是一个函数,专门用来从堆上分配内存。使用malloc函数需要几个要求:内存分配给谁?分配多大内存? 是否还有足够内存分配? 内存将用来存储什么格式的数据?分配好的内存在哪里? 如果这5点都确定,那内存就 能分配。下面看看malloc的原型:(void *)malloc(int size)
malloc函数的返回值是一个void类型的指针,参数为int类型的数据,即申请分配的内存大小,单位是字节。内存 分配成功之后,malloc函数返回这块内存的首地址,你需要一个指针来接受这个地址。也就是说这块内存将来要 用来存储什么类型的数据,如:
char *p = (char *)malloc(100)
在堆内存分配了100个字节的内存,返回这块内存的首地址,把地址强制转换成char *类型后赋给char *类型的指 针变量p;同时告诉我们这块内存将用来存储char类型的数据。你只能通过指针变量p来操作这块内存,这块内存 本身没有名字,对它的访问是匿名访问。但是,不一定每次malloc函数都能成功分配到内存。既然malloc函数申 请内存存在不成功的可能,那我们在使用指向这块内存的指针时,必须用if( NULL != p)语句上来验证内存分 配确实成功了。
3.2 正确使用free函数释放内存
既然有分配,那就必须有释放,不然的话,有限的内存就会用光,而没有释放的内存却占用空间,与malloc对应 的就是free函数了。free函数只有一个参数,就是所要释放的内存块的首地址(指针)。按上例,则 为:free§.free函数其实它就做了一件事:斩断指针变量和这块内存的对应关系。free函数就是把这块内存和p 之间的关系斩断;p本身的值并没有改变或者消失,即指针变量p本身保存的地址并没有改变,那块被释放的内存 里面保存的值也没有改变。这就是free函数的功能,一个malloc对应一个free,是一夫一妻制。在使用free(p) 函数内存释放后,指针变量p本身保存的地址并没有改变,那我们必须需重新把p的值变为NULL:p = NULL。如 果没有把该指针置NULL,这个指针就成为了“悬空指针”,这是很危险的,且也是经常出错的地方。
图片
- 2022年全国赛艇锦标赛在浙江 河北省三部电视剧获第31届中 今年1至9月河北省电子信息产
- 衡水谋划了32个特色果蔬单品 河北省打出资金和政策“组合 全国219个城市被授予“国家 河北湿地公园数量有了跨越式 粤港澳大湾区的中欧班列开行 中国空军“八一”飞行表演队
- 2022年第22号台风“尼格”已 中国空间站迎来重大时刻 空 粤支持韶关建设国家老工业城 清远清城区全新打造的校外未 广州年内将在南沙各镇街布局 广东获第二十三届中国专利奖
- 河北邢台出台20条措施 努力 河北高邑指导企业挖掘传统文 石家庄一90后志愿者成功捐献 前三季度石家庄规上工业高新 江西资溪“两山转化中心”推 畅通道兴贸易 广州海关关区
精彩推送
- 内存泄漏的原因有哪些 malloc函数的功能及用法盘点
- 京津冀携手开展2022“世界艾滋病日”主题宣传活动
- 波司登发布22/23财年半年报,延续稳健高质量增长
- java面试题有几道怎么答 208道java面试题及答案汇总
- tcp ip协议中文意思是什么 TCP/IP模型各层使用协议介绍
- druid是阿里巴巴的什么 Druid是如何监控DB池连接的
- 珊瑚红颜色代码是多少 颜色对应的代码大全一览
- JDBC是什么意思 JDBC技术相关接口有哪些
- mysql安装流程是怎样的 mysql安装和下载教程一览
- update语句怎么理解 如何用update语句修改单个属性语法
- curl命令如何发送GET请求?curl命令的常见用法有哪些?curl命令详解
- 十八数藏入选2022年度数字藏品企业TOP30
- 什么是数据中台?数据仓库之父是谁?数据中台的前世今生介绍
- scp是什么的缩写?scp命令格式是什么样的 scp命令的实际应用概述
- 大树科技与能链控股达成战略合作 共建数字能源产融服务平台
- addEventListener() 方法详解 addEventListener参数说明
- 大树科技与国新健康达成战略合作,共建数字医疗产融新生态
- 友邻YONi4.0上线:流量赋能,企业互帮,共赢未来
- xiao77论坛入口在哪?xiao77论坛如何发帖及传图?
- 今日申购:欧克科技、柏星龙、特瑞斯 头条焦点
- 长安逸动变速箱线速接口处渗油 车主投诉后仅一天解决:全球新动态
- 新能源车出口大热 中国品牌到欧洲“华山论剑”-世界快看
- 热门:今日上市:卡莱特、倍益康
- 【环球时快讯】加快电动化布局落地 BBA能否重塑市场格局?
- 全球今热点:纳指涨4.41% 小鹏涨47.3%蔚来涨21.7%虎牙涨19.7%
- 余额宝收益怎么算公式是什么 计算余额宝收益的前提是什么
- 股票放量上涨到底是意味着什么 底部放量上涨后势如何
- 缩表是什么意思央行缩表意味着什么 资产负债表反映企业什么
- 转账限额特点有哪些 每天建行手机银行转账限额是多少
- 宝沃汽车正式宣告破产 宝沃汽车破产原因有哪些
- 8000元1件羽绒服直播间仅卖800元质量过关吗 直播间羽绒服为啥那么便宜
- 为什么中概股离岸人民币又沸腾了 热门中概股最新行情介绍
- 如何让卖家给你乖乖退款?如何让商家快速退货?
- 退货的时候千万别选择退运费是真的还是谣言 运费险退运费的方法介绍
- 社保卡丢失如何补办最快有哪些办法 补办社保卡的材料有哪些
- 西山科技业绩连升产品单价降 界面:股权转让存猫腻 每日看点
- 环球短讯!光格科技业绩连升净利走势背离现金流 应收账款高企
- 海思科:控股股东王俊民质押962万股
- 河南商丘:购买商品房按契税总额15%予以补贴_当前热讯
- 全球热资讯!中国A股房地产板块周二上演“涨停潮”
- 中国西北、华东两条高铁开工建设
- 四川都江堰至四姑娘山山地轨道交通项目全线首座隧道贯通
- 天津设置125亿元再贷款再贴现额度支持京津冀产业链融资:环球微资讯
- 全球焦点!网购“戴森”当礼物 吹风时自动停机
- 全球热消息:长春市民在苹果店买手机花1400办延保服务 后盖碎了返厂换新难
- 长城宽带用了一年多竟发现户主不是自己 这到底是啥情况?
- 环球新消息丨居家办公时网络突然中断 一查竟是联通宽带被移机了?
- 海底捞被指收取包间服务费 客服:确实有这项收费
- 时创能源、航天环宇12月7日科创板首发上会
- 证监会同意凌玮科技、鸿铭股份创业板IPO注册:世界新要闻
- 非法代理投诉陷阱多,警银联动共同打击黑产
- 世界速递!东星医疗龙虎榜:机构净卖出764.45万元
- 磐安城乡建设3.19亿元竞得金华磐安县1宗商住用地_天天观点
- 天天快讯:浦江城投3.25亿元竞得金华浦江1宗商住用地
- 昆船智能龙虎榜:机构净卖出592.21万元-微头条
- 环球今亮点!机构:前11月TOP100房企销总额为67268.1亿元,同比下降42.1%
- 冠寓合资企业北京龙湖方恒30%股权被挂牌 转让底价150万元
- 中交地产20亿元资产支持ABS已获受理
- 天天微资讯!贝壳找房:第三季度净收入176亿元,总交易额7371亿元
- 保利发展龙虎榜:机构净卖出4.52亿元
- 勤上股份拟终止向晶腾达定增 股价跌0.84%
- 首开股份跌停 机构净卖出1.59亿元 焦点速读
- 中远海能龙虎榜:机构净卖出1.34亿元 新视野
- 当前关注:华金证券原2保代违规被监管谈话 现均跳槽至东北证券
- 【快播报】广汽本田全新缤智正式上市 售价13.29万元起
- 卫龙:坚守品质初心 引领世界美味
- 沉浸式学习更利于孩子上网课,科大讯飞AI学习机有好方法
- 破发股艾力斯跌5.6% 上市即巅峰募20亿中信证券保荐
- 全球焦点!合盛硅业跌6.69% 安信证券在其高点唱多
- 沃森生物跌6.32% 股价高点下跌后招商证券最先唱多
- 世界简讯:破发股信德新材跌4.1% IPO超募15亿元中信证券保荐
- 德邦科技跌8.9% 上市超募8.4亿俩月后董事长协助调查:世界快报
- 游戏品类加速回暖,文娱内容持续火热——2022年IAA行业品类发展洞察系列报告·第三期
- 环球关注:招商银行厦门分行被责令改正 基金销售业务存六项违规
- 凯淳股份前三季净利降149% 去年上市即巅峰募资5亿_每日消息
- 京杭等四城一日卖地505.78亿元 民营房企加大拿地投资力度
- 湖南:实施十二项重点任务推进乡村建设 快播报
- 焦点快看:极氪001提车后出现动力受限、无法加速故障 车主投诉后已协商退车
- 环球焦点!监管定调打造REITs市场“保租房板块” 新发项目有望扩展至二线城市
- 正和生态前三季亏损 招商证券保荐去年上市现今破发
- 国家统计局:11月份制造业PMI为48.0%_天天新资讯
- 【独家】汽车整车板块涨6.05% 安凯客车涨10.08%居首
- 中国金茂拟转让上海洮茂置业49%股权 涉普陀区桃浦科技智慧城项目-热头条
- 天天热文:建设银行厦门分行被责令改正 基金销售业务存四项违规
- 抢1212份免单!掌上明珠家居超级省年终大促劲爆来袭!
- 凯叔讲故事X搜狗输入法联手“整活”,麦小米的100个烦恼等IP主题皮肤上线
- transformer是什么意思 Transformer模型详细介绍
- 什么是Vuex?vuex官方解释是什么?Vuex详解
- maven repository是什么意思 MavenRepository官网崩溃怎么解决
- LSTM解决了RNN中什么问题?LSTM为什么能够缓解梯度消失?LSTM常见面试题
- jwt是什么东西?JWT的本质是什么?JWT的认证流程介绍
- java下载途径有哪些?Java的官网下载链接一览 java17下载安装教程
- 设计模式分为几类?工厂类设计模式的代码是什么?
- flex布局是什么意思通俗解释 flex布局中的一些基本概念介绍
- UML模型图的构成有哪些?5类UML图的分类法 UML相关概述介绍
- 中小学生如何学习Python编程 python基础教程初学者指南一览
- Git下载路径是什么?Git安装组件有哪些?
- 环球今日报丨打通动力电池回收关键堵点
- 大树科技携手云采科技,助力政府公共资源交易数字化产融建设
- 宁德时代加入“天价锂矿”争夺战 斯诺威控制权归属扑朔迷离:独家
金融
财经
要闻
公司
吉卜力工作室如今已加入到主题公园的浪潮,并于11月1日正式对公众开放全球首个项目,将《龙猫》等经典作品的场景复原至现实世界。对于吉卜
详细>>随着在线旅游企业数量的不断增多,售卖不合理低价旅游产品、违规利用用户个人信息等问题也时有发生。11月1日,文旅部发布《文化和旅游部关
详细>>两个小时,这是越南全国首票榴莲从装车到运送至我国广西崇左友谊关口岸的时间。得益于一体化供应链,2021年,中国与越南进出口贸易额达到23
详细>>11月1日,北京商报记者梳理发现,截至9月末,10家A股上市农商行资产规模均有所扩大,重庆农商行、上海农商行仍以万亿元总资产位居前列。营
详细>>西贝餐饮集团(以下简称西贝)在儿童餐的道路上越走越深。11月1日,北京商报记者从西贝获悉,其将推出西贝儿童餐零售产品。目前,部分西贝门
详细>>新一期麻辣粉和逆回购操作如期公布。9月15日,央行发布消息称,为维护银行体系流动性合理充裕,开展4000亿元中期借贷便利(MLF)操作和20亿元
详细>>