Yeah, but who dictates what best practices are?
Common sense: if you do not free what you allocate, you end up with a memory leak. That the OS may act like a garbage collector is irrelevant.

I do not entirely agree with this stand myself (it sounds a little too harsh), but I have to agree that since we are concentrating on standard C, and standard C is not concerned with whether the OS does such a reclamation of memory, we should teach as if this is not the case, and indeed it might not be the case.

You can read the discussion for yourself: Concerning delete/delete[] at program exit

Note that it is in the C++ programming forum, not here.

I thought "best practice" was not to use C99.
That's Prelude's opinion, but since that version of the C standard exists, to say that // is not part of C would be factually incorrect.