The best reason to free memory at the end of a program is to find leaks. At least some profilers, like purify, will claim everything is leaked when you don't free before the end of the program. Now, you know it doesn't really matter in the sense that the memory is released to the OS, but it makes it much harder to tell if there was something that you really did intend to free but accidentally did not. This is important for long running processes, like a server process, a daemon, etc where memory leaks can cause major problems. For simple programs that do a job and then exit right away, I really don't think it matters if you free explicitly.