Ich habe Clang in meinem Rechner (Ubuntu) installiert, um Speicherlecks in meinem C-Code zu finden. Ich schrieb einen Beispielcode, um das Funktionieren der es zu prüfen, welche wie folgt lautet:So finden Sie Speicherverluste mit 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;
}
ich einige Optionen im Internet gefunden wie
$ scan-build clang --analyze hello.c
und
$ scan-build clang -fsanitize=address hello.c
zu kompilieren Aber keine von ihnen zeigt Anzeichen von Speicherverlust.
Scan-build: Mit '/ usr/bin/Klirren' für die statische Analyse
Scan-build: Entfernen Verzeichnis '/ tmp/Scan-build-2015-07-02-122717-16928-1' weil es keine Berichte enthält.
Scan-Build: Keine Fehler gefunden.
Kann jemand freundlich erklären, wie man Clang für Speicherleckdetektion richtig verwendet.
Verwenden Sie [Valgrind] (http://valgrind.org) beim Testen Ihres Programms. Solche Fehler sind im allgemeinen Fall nicht statisch zu finden (einige Tools können jedoch einige Fehler heuristisch oder konservativ finden). Und '-fsanitize = Adresse' fügt * Laufzeitprüfungen * hinzu, so dass Sie das Programm ausführen müssen. –
hast du versucht '$ scan-build clang -fsanitize = adresse -g hallo.c'? –
$ scan-build clang -fsanitize = adresse -g hallo.c ja ich habe versucht –