试图压制铿锵的假阳性泄漏警告

时间:2017-05-12 14:57:21

标签: c suppress-warnings clang-static-analyzer false-positive

我在Xcode 6.4(6E35b)下使用clang静态分析,并获得关于潜在内存泄漏的误报警告。我明确地释放了有问题的内存,但是释放发生在不同的编译单元中。这是我的MWE:

file2.c:执行实际的释放。

#include <stdlib.h>
void my_free(const void* p) {
    free((void*) p);
}

file1.c:分配内存并通过外部函数显式释放它。

#include <stdlib.h>
void my_free(const void* p);

int main(int argc, char* argv[]) {
    void* data = malloc(1);
    if(data) my_free(data);
    return 0; /* <-- "Potential leak of memory pointed to by 'data'" */
}

当我在与其调用相同的编译单元中定义my_free()时,不会生成警告,但当然我需要从大量不同的源文件中调用my_free()

我已阅读FAQ and How to Deal with Common False Positives,但这并未解决我的情况。我该怎么做才能确保我真正释放出有问题的记忆?

如果版本信息相关:

% clang --version
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)

1 个答案:

答案 0 :(得分:3)

解决这个问题的一种方法是在头文件中添加特定于分析器的代码:

#ifdef __clang_analyzer__
#define my_free free
#endif

这将使静态分析器认为您正在使用经典free函数并停止抱怨。