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.