Freeing memory twice is undefined behavior, e.g.
int * x = malloc(sizeof(int));
*x = 9;
free(x);
free(x);
Quote from standard(7.20.3.2. The free function of C99 ):
Otherwise, if the argument does not match a pointer earlier returned
by the calloc, malloc, or realloc function, or if the sp...