6

Mam zainstalowany Clang w moim komputerze (ubuntu), aby znaleźć wycieki pamięci w moim kodzie C. Napisałem przykładowy kod w celu sprawdzenia pracy z nim, który przedstawia się następująco:Jak znaleźć wycieki pamięci z 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; 
} 

Znalazłem kilka opcji w internecie, aby skompilować jak

$ scan-build clang --analyze hello.c 

i

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

Ale żaden z nich nie wykazuje oznak wycieku pamięci.

scan-build: Użycie '/ usr/bin/szczęk' do analizy statycznej
scan-build: Usuwanie katalogu '/ tmp/scan-build-2015-07-02-122717-16928-1' ponieważ nie zawiera żadnych raportów.
scan-build: Nie znaleziono błędów.

Czy ktoś może powiedzieć, jak prawidłowo używać funkcji wykrywania wycieków w programie Clang for Memory.

+0

Użyj [valgrind] (http://valgrind.org) podczas testowania programu. Takie błędy są niemożliwe do znalezienia statycznego w ogólnym przypadku (ale niektóre narzędzia mogą wykryć błędy heurystycznie lub zachowawczo). I '-fsanitize = address' dodaje * kontrole czasu wykonywania *, więc musisz uruchomić program. –

+0

czy wypróbowałeś '$ scan-build clang -fsanitize = address -g hello.c'? –

+0

$ scan-build clang -fsanitize = adres -g hello.c tak spróbowałem –

Odpowiedz

2

ciekawe, dzyń statyczny analizator stwierdzi wyciek pamięci, jeśli zadeklarujesz void *x wewnątrz main:

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

Analizując ten kod uruchamiając:

scan-build clang -g hello.c 

daje ostrzeżenie jak:

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