Jos*_*ord 5 c false-positive suppress-warnings clang-static-analyzer
我正在Xcode 6.4(6E35b)下使用clang静态分析,并收到有关潜在内存泄漏的错误肯定警告。我确实明确释放了有问题的内存,但是释放发生在另一个编译单元中。这是我的MWE:
file2.c:执行实际的释放。
#include <stdlib.h>
void my_free(const void* p) {
free((void*) p);
}
Run Code Online (Sandbox Code Playgroud)
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'" */
}
Run Code Online (Sandbox Code Playgroud)
当我my_free()在与其调用相同的编译单元中进行定义时,不会生成警告,但是当然我需要my_free()从大量不同的源文件中进行调用。
我已经阅读了常见问题解答和如何处理常见的误报,但是并不能解决我的情况。我该怎么做才能确保clang确实释放了相关的内存?
如果版本信息是相关的:
% clang --version
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Run Code Online (Sandbox Code Playgroud)
解决此问题的一种方法是在头文件中添加特定于分析器的代码:
#ifdef __clang_analyzer__
#define my_free free
#endif
Run Code Online (Sandbox Code Playgroud)
这将使静态分析器认为您正在使用经典free函数并停止抱怨。
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |