前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内存泄漏——恶魔天使之战(操作内存必看)

内存泄漏——恶魔天使之战(操作内存必看)

作者头像
秋名山码神
发布2022-12-13 14:07:54
3130
发布2022-12-13 14:07:54
举报
文章被收录于专栏:码神随笔

文章目录


前言

不知道大家有没有听过这样一句话:一个c++程序员,内存泄漏了,一包烟,一杯茶,一下午,码神本来不信这句话,直到今天,我领悟了内存泄漏的危险情况,所以临时更新一次

一、c++操作内存的优点与缺点

如果有学过其他语言的应该知道,C++给我们的可操作性实在太大了,它让我们可以操作内存,高性能随之而来,但是天使与恶魔总是共存的,来了操作内存,内存泄漏也随之而来,像今天的码神一样,哭了 所以内存的操作也可能导致一些最隐蔽的bug出现 例如:

  1. 内存耗尽——死机
  2. 出现一些隐藏的bug——不知道什么时候出错

二、内存操作

1.指针

提到内存操作,我感觉非插一句指针不行,有时间我单独更新一期指针,今天先简单说一下,具体等指针单独说,原谅我的困 指针:首先指针是一个变量,其储存的是值的地址,而不是其值本身, 例如:int *a=10,,a就是地址,*a为10

泄漏1:

int *a; *a=123; 这就是一个入门级的指针泄漏,a是一个指针但是他没有被初始化,但它指向哪里呢?so它可能指向任何地址,可能有任何值,如果a恰好指向100,那么它可能就不是储存123的地方,这可能在当时没有太大问题,但是埋下了恶魔的种子。

所以我建议:在对指针应用解引用操作符”*“时,将指针初始化为一个确定的,适当的地址

2.开辟新空间——new

如果说指针是一个坑,那么new一定是让你对他又爱又恨,天使的温柔,恶魔的报复。

内存泄漏2:

就是这个new,写说一下简单用法:

代码语言:javascript
复制
int *a=new int ;//分配一块内存给a
*a=123;//a的数值=123;

为什么会出现内存耗尽的情况? 计算机可能没有充足的空间来满足new的请求此时:delete就出现了,释放内存

代码语言:javascript
复制
delete a;//释放a的内存

这里的内存泄漏主要出现在析构函数上 注意,如果函数结束没有主动释放new的内存,new是会一直占用,直到程序结束,所以有个编码习惯就是new和delete一起使用,其中用delete在析构函数中释放内存

总结

好了,说了也不少,感觉如果要写内存还是要单独开一期指针,欢迎大家补充一下,你们遇到的内存泄漏,我再加更上去,谢啦! 总结一下吧:

  1. new和delete一起使用
  2. 在对指针应用解引用操作符”*“时,将指针初始化为一个确定的,适当的地址

原创不易,欢迎三连,白天再写几个实例

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、c++操作内存的优点与缺点
  • 二、内存操作
    • 1.指针
      • 泄漏1:
    • 2.开辟新空间——new
      • 内存泄漏2:
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档