傻大方


首页 > 人文 >

内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!



按关键词阅读:

引言
对于任何使用 C 语言的人 , 如果问他们 C 语言的最大烦恼是什么 , 其中许多人可能会回答说是指针和内存泄漏 。 这些的确是消耗了开发人员大多数调试时间的事项 。
指针和内存泄漏对某些开发人员来说似乎令人畏惧 , 但是一旦您了解了指针及其关联内存操作的基础 , 它们就是您在 C 语言中拥有的最强大工具 。
本文将与您分享开发人员在开始使用指针来编程前应该知道的秘密 。 本文内容包括:
1. 导致内存破坏的指针操作类型
2. 在使用动态内存分配时必须考虑的检查点
3. 导致内存泄漏的场景
如果您预先知道什么地方可能出错 , 那么您就能够小心避免陷阱 , 并消除大多数与指针和内存相关的问题 。
内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!
本文图片

啥是内存泄漏
内存泄露的解释如下:
在计算机科学中 , 内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存 。 内存泄漏并非指内存在物理上的消失 , 而是应用程序分配某段内存后 , 由于设计错误 , 导致在释放该段内存之前就失去了对该段内存的控制 , 从而造成了内存的浪费 。
在C++中出现内存泄露的主要原因就是程序猿在申请了内存后(malloc(), new) , 没有及时释放没用的内存空间 , 甚至消灭了指针导致该区域内存空间根本无法释放 。
知道了出现内存泄露的原因就能知道如何应对内存泄露 , 即:不用了的内存空间记得释放 , 不释放留着过年哇!
内存泄漏可能会导致严重的后果:
●程序运行后 , 随着时间占用了更多的内存 , 最后无内存可用而崩溃;
●程序消耗了大量的内存 , 导致其他程序无法正常使用;
●程序消耗了大量内存 , 导致消费者选用了别人的程序而不是你的;
●经常做出内存泄露bug的程序猿被公司开出而贫困潦倒 。
如何知道自己的程序存在内存泄露?
根据内存泄露的原因及其恶劣的后果 , 我们可以通过其主要表现来发现程序是否存在内存泄漏:程序长时间运行后内存占用率一直不断的缓慢的上升 , 而实际上在你的逻辑中并没有这么多的内存需求 。
如何定位到泄露点呢?
根据原理 , 我们可以先review自己的代码 , 利用"查找"功能 , 查询new与delete , 看看内存的申请与释放是不是成对释放的 , 这使你迅速发现一些逻辑较为简单的内存泄露情况 。
如果依旧发生内存泄露 , 可以通过记录申请与释放的对象数目是否一致来判断 。 在类中追加一个静态变量 static int count;在构造函数中执行count++;在析构函数中执行count--; , 通过在程序结束前将所有类析构 , 之后输出静态变量 , 看count的值是否为0 , 如果为0,则问题并非出现在该处 , 如果不为0 , 则是该类型对象没有完全释放 。
检查类中申请的空间是否完全释放 , 尤其是存在继承父类的情况 , 看看子类中是否调用了父类的析构函数 , 有可能会因为子类析构时没有是否父类中申请的内存空间 。
对于函数中申请的临时空间 , 认真检查 , 是否存在提前跳出函数的地方没有释放内存 。
内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!
本文图片

什么地方可能出错?
有几种问题场景可能会出现 , 从而可能在完成生成后导致问题 。 在处理指针时 , 您可以使用本文中的信息来避免许多问题 。
未初始化的内存
在本例中 , p 已被分配了 10 个字节 。 这 10 个字节可能包含垃圾数据 , 如图所示 。
char *p = malloc ( 10 );
垃圾数据
如果在对这个 p 赋值前 , 某个代码段尝试访问它 , 则可能会获得垃圾值 , 您的程序可能具有不可预测的行为 。 p 可能具有您的程序从未曾预料到的值 。


稿源:(程序猿虎牙参上)

【】网址:http://www.shadafang.com/c/hn102YU2H2020.html

标题:内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!


上一篇:固态硬盘|电脑固态硬盘应该怎么选?三星PM981,几秒开机不是梦!

下一篇:赛睿rival 3|赛睿Rival 3 Wireless电竞鼠标评测 超长续航


人文

年薪制| 年薪制要来了吗?事业单位职工收入或将有大变化!

阅读(22)

近日,人社部组织实施人才服务专项行动,推进高校、科研院所薪酬制度改革。落实高层次人才工资分配激励政策,鼓励事业单位对高层次人才实行年薪制、协议工资制、项目工资等灵活多样的分配形式。鼓励事业单位对高层次人才实行年薪制、协议工资制、项目工资等灵...

人文

#quot#六旬男子足底黑痣会长大 检查发现是恶性肿瘤

阅读(10)

本年60 岁的陈师长教师比来有些忧?。本来,三年前他的左脚底足跟邻近长了一颗黄豆大年夜小、凸起的黑" 痣"。一年前开端,这颗" 痣" 有逐渐长大年夜之势,伴有些许压痛,于是陈师长教师按期到家邻近的修脚店把这颗" 痣" 磨平,...

人文

格萨尔|《藏地奇兵》石渠开机 穿越藏地最后秘境热血探险

阅读(15)

由沃星影业、拉近影业、拉近沃星影业出品,成都影视硅谷集团、青岛东望影业联合出品的电影《藏地奇兵》于10月12日在四川石渠正式开机。该片由著名演员秦岚担任出品人兼艺术总监,张楚晗担任总制片人,张著麟、李希杰、温子迅执导,魏千翔、屈菁菁、邢瀚卿、吴...

人文

凤眼看房长沙|长三角多市出台调控政策 房企拿地热情不减

阅读(17)

回望过去一段时间,不仅是宁波,整个长三角已是房企必争之地。今年融资环境稍有宽松后,大小房企集体携金杀往长三角,土拍市场屡现高溢价,即便多地出手调控,仍有地王出现。楼市也在市场情绪助推下迅速反弹。“近年来三四线城市房产饱和、风险积聚,标杆企业...

人文

时尚探究社成都街拍:图集分享

阅读(43)

这个夏天阴阳色也太好看了吧~又个性,又显白的发色,就算搭配学院风也一点都不突兀。一看就是经常健身的小姐姐,这个身材曲线真的羡慕了~不要太美~...

人文

Tina|卫衣 + 半裙,照着穿好看爆了 !

阅读(21)

卫衣+半裙的搭配,属实是显胖王者,它要是称第二,那也是太谦虚了。当你挑选的裙子也很宽松时,穿上它就是灾难本身,转过身去看背后,Tina都想落泪,这五五分的身材是真实存在的吗?明明是同款卫衣,却比旁边穿裤子的look,腿长短了好多!不过小可爱们不用害...

人文

怪我碍你|十月再见,十一月你好,释然过往,砥砺向前

阅读(12)

逝去的时光中,总有一些东西会在心中成为永恒,那么,就铭记那些美好吧,心中有阳光,充满正能量,微笑着面对生活;也会有些事情成为遗憾,有些心愿没能实现,但也不要气馁,更不要抱怨,笑看过往,努力过好当下和明天,不胡思乱想,不执着于过去。愿所有的真...

人文

午间时刻《欢喜猎人》要播了吗?包贝尔贾玲再次合作,携手《欢喜密探》原班人马回归

阅读(35)

网剧《欢乐密探》就是一部不错的喜剧作品,而《欢乐猎人》是《欢乐密探》原班人马打造的第二部影视作品,所以有很多人都等着可以早点看到这部剧,然则在《欢乐猎人》拍了两年今后,一向没有播出,大年夜家也都等得异常焦急。不过,有传言说《欢乐猎人》这部电...

人文

社会【观点】医改进程迟缓的原因及破解之策

阅读(20)

1供给侧改革进展迟缓大年夜实际来看,医疗供给侧改革在社会办医、医务人员自由执业、公立病院去行政化三个方面并没有太多本质性的进展,这也是我国医改未能有大年夜冲破的重要原因。1.1社会办医成长迟缓成长社会办医,不仅是实际须要,也是一种策略。在公立病...