C++ 内存泄漏

C++中被new出的空间没有被正确的delete则会造成内存泄漏。内存泄漏可以导致程序在运行时没有足够的内存空间,从而发生OOM错误。

看电视机的亚瑟

我在这里要测试一件事情,就是不正确的释放new出来的空间,看看会发生什么。上图中两段代码,左侧正常的new和delete,而右侧只new不delete。

看电视机的亚瑟

在程序运行过程中,这样的结果是显然的,也就是说不正确的delete内存会被继续消耗,而大量的这种情况存在,会使得程序在运行期间消耗的内存越来越大,到最后慢慢变卡,最后的最后就crash掉了。

导致不能正确的delete的常见的原因有:

(1)就是忘记写了。。。

(2)在执行某个子函数的过程中计划先new,然后在函数结束时delete,但是函数中存在多个return语句,不是每个return前都加了delete

(3)在执行过程中遇到了异常(请注意,遇到异常不一定会crash),导致函数在执行delete之前就返回了。

但是注意一个问题,当整个程序运行结束时,没有被正确delete的空间会被释放掉吗?答案是会的,在程序结束时,程序中申请的所有内存都会被释放掉。

因此,内存泄漏的主要影响在于,在我们的程序中,内存消耗会越来越大,到最后根本没有足够的内存可以使用,也就是OOM错误。不注意内存泄漏在实际的应用软件中可能会造成软件卡顿、崩溃等。