You can't, because new can work very differently from malloc and have its own memory management scheme. You can only pass pointers that were returned by malloc to free - those returned by new probably were never returned by malloc.
Interchanging free/delete and new/malloc might seem to work in some cases, namely when new and delete are implemented in the following "naive" way:
But imagine a small-object allocator that say, preallocates chunks of 64k using malloc and then passes out pointers within that block for each call to new. Trying to use free on these pointers would result in disaster.
Not to mention no constructors and destructors are called when using malloc/free.