In some situations using functions such as HeapAlloc, HeapFree will make your life easier. One example would be: a big application where you need to allocate memory in one module (say in library1.dll) and free that memory in the main module (say program.exe). This can be done safely if you are using HeapAlloc, HeapResize and HeapFree functions, but cannot be done using C runtime library (eg malloc, free, resize).
BUT: If you don't have a good reason, you should stick with malloc/free/resize functions.
Also, if you need to change permisions of the allocated memory (eg: to make if executable, etc), you should use functions such as VirtualAlloc, VirtualFree.