Как найти утечки памяти с Clang

Я установил Clang на моей машине (Ubuntu), чтобы обнаружить утечки памяти в моем 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 для обнаружения утечек памяти.

1 ответ

Интересно, что статический анализатор clang обнаружит утечку памяти, если вы объявите void *x внутри 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;
  ^~~~~~~~
Другие вопросы по тегам