MLK.RET.MUST

内存泄漏

当被分配的内存从函数返回,但未分配到任何变量时,将报告 MLK.RET.MUST 问题。被分配的内存在此时丢失。

漏洞与风险

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

漏洞代码示例

复制
  void* alloc_data()
  {
    return malloc(10);
  }

  void foo()
  {
    alloc_data();
  }

Klocwork 生成内存泄漏报告,表明通过函数 alloc_data 所分配的动态内存在第 8 行丢失。

修正代码示例

复制
  void* alloc_data()
  {
    return malloc(10);
  }

  void foo()
  {
    void* ptr = alloc_data();
    free(ptr);
  }