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。
我有一个分配对象的库。在大多数情况下,这些对象永远不会被应用程序释放。当然,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。