When short lived programs are written, we might allocate some space using malloc() and forget to free it. The programs runs and then successfully completes.
It is actually wrong not to call free() on the allocated bunch of memory. But this will not lead to a memory leak in case we forget to call free(). The reason for this is simple. There are 2 levels of memory management working.
- The memory management performed by the OS: This hands out memory to processes as they run and takes it back when they exits.
- The memory management performed by the user: This is managed by the user, by explicitly calling malloc() and free().
When the process ends, no matter what the state of heap/stack is, everything is reclaimed by the OS, thus ensuring no memory is leaked.
But not calling free() would be an issue, if you have written a long running program, like a web service or any other service which is running for long time.