如何使用Clang查找内存泄漏

Sai*_*Ram 8 c memory-leaks clang clang-static-analyzer memory-leak-detector

我已经在我的机器(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;
}
Run Code Online (Sandbox Code Playgroud)

我发现在互联网上有一些选项可以编译

$ scan-build clang --analyze hello.c
Run Code Online (Sandbox Code Playgroud)

$ scan-build clang -fsanitize=address hello.c
Run Code Online (Sandbox Code Playgroud)

但他们都没有表现出任何内存泄漏的迹象.

scan-build:使用'/ usr/bin/clang'进行静态分析
scan-build:删除目录'/ tmp/scan-build-2015-07-02-122717-16928-1',因为它不包含任何报告.
scan-build:找不到错误.

任何人都可以告诉如何正确使用Clang进行内存泄漏检测.

msm*_*ens 4

void *x有趣的是,如果您在内部声明,clang 静态分析器会发现内存泄漏main

int main() {
  void *x = malloc(2);
  x = 0; // Memory leak
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

通过运行来分析此代码:

scan-build clang -g hello.c
Run Code Online (Sandbox Code Playgroud)

给出如下警告:

hello.c:9:3: warning: Potential leak of memory pointed to by 'x'
  return 0;
  ^~~~~~~~
Run Code Online (Sandbox Code Playgroud)