6

Ho installato Clang nella mia macchina (ubuntu) per trovare perdite di memoria nel mio codice C. Ho scritto un codice di esempio al fine di verificare il funzionamento di esso che è la seguente:Come trovare perdite di memoria con Clang

/* 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; 
} 

ho trovato alcune opzioni in internet per compilare come

$ scan-build clang --analyze hello.c 

e

$ scan-build clang -fsanitize=address hello.c 

Ma nessuno di loro mostra segni di perdita di memoria.

scan-build: Utilizzo '/ usr/bin/clang' per l'analisi statica
scan-build: Rimozione directory '/ tmp/scan-build-2015-07-02-122717-16928-1' perché non contiene report.
scan-build: nessun bug trovato.

Qualcuno può gentilmente dire come utilizzare correttamente Clang per il rilevamento delle perdite di memoria.

+0

Utilizzare [valgrind] (http://valgrind.org) durante il test del programma. Tali bug sono impossibili da trovare staticamente nel caso generale (ma alcuni strumenti potrebbero trovare alcuni bug in modo euristico o conservativo). E '-fsanitize = address' aggiunge * i controlli di runtime *, quindi è necessario eseguire il programma. –

+0

hai provato '$ scan-build clang -fsanitize = indirizzo -g ciao.c'? –

+0

$ scan-build clang -fsanitize = indirizzo -g ciao.c sì ho provato –

risposta

2

interessante notare che l'analizzatore statico clang trova la perdita di memoria se si dichiara void *x all'interno main:

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

Analizzando questo codice eseguendo:

scan-build clang -g hello.c 

dà un avvertimento del tipo:

hello.c:9:3: warning: Potential leak of memory pointed to by 'x' 
    return 0; 
    ^~~~~~~~