试图抑制 clang 误报泄漏警告
Trying to suppress clang false positive leak warning
我在 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 我真的在释放有问题的内存?
如果版本信息相关:
% clang --version
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
解决此问题的一种方法是在头文件中添加特定于分析器的代码:
#ifdef __clang_analyzer__
#define my_free free
#endif
这将使静态分析器认为您正在使用经典的 free
函数并停止抱怨。
我在 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 我真的在释放有问题的内存?
如果版本信息相关:
% clang --version
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
解决此问题的一种方法是在头文件中添加特定于分析器的代码:
#ifdef __clang_analyzer__
#define my_free free
#endif
这将使静态分析器认为您正在使用经典的 free
函数并停止抱怨。