MLK.MUST

内存泄漏

程序未释放之前分配的内存,并且此时对动态内存的引用可能丢失。

漏洞与风险

内存泄漏导致应用程序消耗更多内存。这会减少其他应用程序可用的内存量,最终导致操作系统开始分页,系统速度变慢。在严重情况下,应用程序将达到总内存限制,这可能导致应用程序崩溃。

示例 1

复制
  class A{
     void foo();
  };
   void A::foo()
   {
     int *ptr = new int;
     *ptr = 25;
     ptr = new int;
     *ptr = 35;
  }

Klocwork 针对第 8 行生成内存泄漏报告,表明存储在 ptr 中并通过第 6 行的函数 new 进行分配的动态内存在第 8 行丢失。在以上示例中,还针对第 10 行报告了另一处内存泄漏:存储在 ptr 中并通过第 8 行的函数 new 进行分配的动态内存在第 10 行丢失。