Instalé Clang en mi máquina (ubuntu) para encontrar pérdidas de memoria en mi código C. Escribí un código de muestra para verificar su funcionamiento, que es el siguiente:
/* 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; }Encontré algunas opciones en internet para compilar como
$ scan-build clang --analyze hello.cy
$ scan-build clang -fsanitize=address hello.cPero ninguno de ellos muestra signos de pérdida de memoria.
scan-build: Uso de '/usr/bin/clang' para análisis estático
scan-build: eliminando el directorio '/tmp/scan-build-2015-07-02-122717-16928-1' porque no contiene informes.
escaneo-construcción: No se encontraron errores.
¿Alguien puede decirme cómo usar correctamente Clang para la detección de fugas de memoria?
Curiosamente, el analizador estático clang encuentra la fuga de memoria si declara void *x dentro de main :
int main() { void *x = malloc(2); x = 0; // Memory leak return 0; }Analizando este código ejecutando:
scan-build clang -g hello.cda una advertencia como:
hello.c:9:3: warning: Potential leak of memory pointed to by 'x' return 0; ^~~~~~~~