1
2void test() {
3 int *p = malloc(1);
4 free(p);
5 free(p); // warn: attempt to free released memory
6}
7
8void test() {
9 int *p = malloc(sizeof(int));
10 free(p);
11 *p = 1; // warn: use after free
12}
13
14void test() {
15 int *p = malloc(1);
16 if (p)
17 return; // warn: memory is never released
18}
19
20void test() {
21 int a[] = { 1 };
22 free(a); // warn: argument is not allocated by malloc
23}
24
25void test() {
26 int *p = malloc(sizeof(char));
27 p = p - 1;
28 free(p); // warn: argument to free() is offset by -4 bytes
29}
30
31

source code of clang/docs/analyzer/checkers/unix_malloc_example.c