【发布时间】:2015-09-19 13:45:36
【问题描述】:
我在我的机器 (ubuntu) 中安装了 Clang,以便在我的 C 代码中查找内存泄漏。我写了一个示例代码来检查它的工作情况,如下所示:
/* File: hello.c for leak detection */
#include <stdio.h>
#include <stdlib.h>
void *x;
int main() {
x = malloc(2);
x = 0; // Memory leak
return 0;
}
我在网上找到了一些编译选项
$ scan-build clang --analyze hello.c
和
$ scan-build clang -fsanitize=address hello.c
但它们都没有显示出任何内存泄漏的迹象。
scan-build: 使用 '/usr/bin/clang' 进行静态分析
scan-build: 删除目录 '/tmp/scan-build-2015-07-02-122717-16928-1' 因为 它不包含任何报告。
scan-build:未发现任何错误。
谁能告诉我如何正确使用 Clang 进行内存泄漏检测。
【问题讨论】:
-
在测试你的程序时使用valgrind。在一般情况下,不可能静态地找到此类错误(但某些工具可能会启发式或保守地找到一些错误)。并且
-fsanitize=address添加了运行时检查,所以你需要运行程序。 -
你试过
$ scan-build clang -fsanitize=address -g hello.c吗? -
$ scan-build clang -fsanitize=address -g hello.c 是的,我试过了
-
查看生成的代码,确认编译器没有优化掉
main的主体。
标签: c memory-leaks clang clang-static-analyzer memory-leak-detector