In UNIX systems we know malloc() is a non-reentrant function (system call). Why is that?
malloc()
Similarly, printf() also is said to be non-reent
printf()
Most likely because you can't start writing output while another call to printf is still printing it's self. The same goes for memory allocation and deallocation.