Second question first: new without delete.
That's easy. It's a memory leak. If you do it a lot, then eventually your code runs slower, because all the newed up stuff forces older stuff to get paged to disk to make room in physical memory for the new stuff.
Eventually you will consume all the memory your program is allowed to allocate, and new will fail. And you probably didn't gracefully handle the case where new fails, so your code will just crash and burn. What it spits out as a dying gasp error message is rather irrelevant.
Deleting a pointer that wasn't allocated by new is even less predictable. Most anything could happen. The heap management code might be smart enough to recognize that you are freeing memory it didn't allocate. Which might cause it to ignore your delete. Or it might cause it to throw an exception. Or maybe it will just crash and burn as soon as you call it.
C++ is pretty much merciless when it comes to shooting yourself in the foot by doing silly things like freeing a pointer you didn't allocate. It can get in your face right away and tell you you *mucked* up. Or it can ignore it. Or it can do nasty things that cause your code to crash in very random ways 3 days from now.
If you are going to write C++ code, then it is best to learn how to not shoot yourself in the foot. Knowing what happens if you do is.... well, don't ask. Because it could very well do something totally different next time around. You don't want to go there.
ETA: @Robert: Non-aligned and not assigned using malloc are 2 very, *very* different things. What happens if you pass a properly *aligned* pointer that wasn't allocated by malloc? An alignment check is cheap: you do a mod on the address. Not allocated by is much more expensive.
Gotta agree with Oops here: Don't do that. And don't bother asking what if.