Как найти утечки памяти с 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;
^~~~~~~~