9

我已经在我的机器(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”,因为它不包含任何报告。
扫描构建:没有发现错误。

谁能告诉如何正确使用 Clang 进行内存泄漏检测。

4

1 回答 1

4

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

int main() {
  void *x = malloc(2);
  x = 0; // Memory leak
  return 0;
}

通过运行分析此代码:

scan-build clang -g hello.c

给出如下警告:

hello.c:9:3: warning: Potential leak of memory pointed to by 'x'
  return 0;
  ^~~~~~~~
于 2015-12-09T01:26:59.950 回答