I created a char array like so:
char arr[3] = "bo";
How do I free the memory associated with array I named "arr"?
Local variables are automatically freed when the function ends, you don't need to free them by yourself. You only free dynamically allocated memory (e.g using malloc) as it's allocated on the heap:
char *arr = malloc(3 * sizeof(char));
strcpy(arr, "bo");
// ...
free(arr);
More about dynamic memory allocation: http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
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.
char arr[] = "bo"to allow the compiler to work out the length and so make sure that there is enough room for a null terminator. If you changed your code tochar arr[3] = "boo";then there would be no null terminator.