Coverity 和从未释放的存储空间

Coverity and never freed storage

我有一个分配对象的库。在大多数情况下,这些对象永远不会被应用程序释放。当然,Coverity 会用 leaked_storage.

标记每次使用此库

我真的不想添加 100 多个 Coverity 注释,是否可以从库内部抑制这些警告?

如果您有一个函数分配 returns 永远不会释放的内存,我建议将返回的指针保存在 program-lifetime 变量中。这应该使该工具认为内存可能被调用者以外的其他人释放,因此不会报告涉及该分配器的内存泄漏。

例如(未测试,我无法再使用该工具):

#ifdef __COVERITY__
static void *dummy;
#endif

void *never_freed_malloc(size_t size)
{
  void *ret = malloc(size);
#ifdef __COVERITY__
  dummy = ret;   /* suppress memory leak reports */
#endif
  return ret;
}

通过此更改,Coverity 发现 ret“转义”到 program-lifetime 变量 dummy,因此不会假定调用者必须释放它。

#ifdef __COVERITY__ 意味着 dummy 仅被 Coverity 编译器看到,因此不会影响 run-time 性能。另见 Coverity. Configure to ignore certain sections of the source code