Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用叮当声查找内存泄漏_C_Memory Leaks_Clang_Clang Static Analyzer_Memory Leak Detector - Fatal编程技术网

C 如何使用叮当声查找内存泄漏

C 如何使用叮当声查找内存泄漏,c,memory-leaks,clang,clang-static-analyzer,memory-leak-detector,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; } 及 但它们都没有显示任何内存

我在我的机器(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;
}

但它们都没有显示任何内存泄漏的迹象

扫描生成:使用“/usr/bin/clang”进行静态分析
扫描生成: 正在删除目录“/tmp/scan-build-2015-07-02-122717-16928-1”,因为 它不包含任何报告。
扫描生成:未发现任何错误


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

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

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;
  ^~~~~~~~

在测试程序时使用。在一般情况下,这样的bug是不可能静态地找到的(但是一些工具可能会启发式地或保守地找到一些bug)。和
-fsanitize=address
添加运行时检查,因此您需要运行程序。您是否尝试过
$scan build clang-fsanitize=address-g hello.c
?$scan build clang-fsanitize=address-g hello.c是的,我尝试查看生成的代码,以验证编译器没有优化
main
的主体,如果使用clang++并说
x=nullptr
而不是“x=0”,即使使用全局变量,它也会检测到它。
scan-build clang -g hello.c
hello.c:9:3: warning: Potential leak of memory pointed to by 'x'
  return 0;
  ^~~~~~~~