It depends on the OS. Although in most cases, forgetting to free the pointer won't do too much harm, doing so is not a good idea either. This can lead into memory leak. If happening long enough, you can experience a strange shortage of memory that you can't access, causing other programs to not having enough memory to operate.
If you're talking about explicitly freeing a dynamically allocated array that a pointer is pointing to, in short, yes, you do have to go through that process. When the program exits, if your program did not free that memory block, the pointer is still pointing to the allocated block, but no longer allows you to have access to it since the program is out of scope upon exit.