zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

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

内存 操作 必看 泄漏 之战 天使 恶魔
2023-06-13 09:15:52 时间

文章目录


前言

不知道大家有没有听过这样一句话:一个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,写说一下简单用法:

int *a=new int ;//分配一块内存给a
*a=123;//a的数值=123;

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

delete a;//释放a的内存

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

总结

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

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

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