#include int* f1() { int x = 37; int * p = &x; return p; } int** f2() { int * p = f1(); int ** q = NULL; *p = 1234567; // dangling-pointer dereference (what if q is there)! return q; // not dangling (just returning NULL) } void f3() { int * p1 = calloc(1,sizeof(int)); int * p2 = calloc(1,sizeof(int)); int * p3 = calloc(1,sizeof(int)); int * q1 = p1; int * q2 = p2; free(p1); *p1 = 38; // dangling-pointer dereference *q1 = 38; // dangling-pointer dereference free(p2); free(p2); // double-free free(q2); // triple-free return; // space-leak: *p3 will exist until program exit }