The memory associated with arr
is freed automatically when arr
goes out of scope. It is either a local variable, or allocated statically, but it is not dynamically allocated.
A simple rule for you to follow is that you must only every call free()
on a pointer that was returned by a call to malloc
, calloc
or realloc
.