The following code is bad:
char* charpointer= new char[SOMECONSTANT];delete charpointer; // should have been delete  charpointer;
new and new are allowed to use different memory pools. The default new/delete can be overridden somewhere in the program. If you use delete instead of delete, you should expect your program to fail.