c++指针与内存泄露

来源:互联网 发布:工程计算软件 编辑:程序博客网 时间:2024/05/16 17:59

当一个自动变量的地址被存储在一个生命期长于它的指针时该指针被称为空悬指针
dangling pointer 这是一个严重的程序员错误因为它所指的内容是不可预测的如果
该地址的值正好合适因此程序就不会产生段错误该程序可能一直执行到完成但是给
出的是一个无效的结果。

当程序运行期间遇到delete 表达式时pi
指向的内存就被释放了但是指针pi 的内存及其内容并没有受delete 表达式的影响在delete
表达式之后pi 被称作空悬指针即指向无效内存的指针空悬指针是程序错误的一个根源
它很难被检测到一个比较好的办法是在指针指向的对象被释放后将该指针设置为0 这
样可以清楚地表明该指针不再指向任何对象。

delete 表达式应用在值为0 的指针即不指向任何对象的指针
上不会引起任何麻烦。

内存泄露(Memory leak)分配的内存没有及时被释放,导致可用内存不断减少。
大多数情况下是指程序中间动态分配的内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,可能不会对操作系统造成影响,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件引起的。运行一次随即结束的程序可能不会影响到系统的正常工作,但如果是常驻内存的应用程序发生内存泄露的话,将会导致程序或者系统崩溃。
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
我们可以通过仔细检查程序代码的方法来查找程序是否有内存泄露的问题,另一个方法就是通过查看系统内存的变化了,如果内存不断的分配,而释放的少,可能就是内存泄露了。

原创粉丝点击