Heap corruption means you're stepping out of bounds of your dynamically allocated array and writing to an address you shouldn't be.
Sometimes the program will crash on the delete line (if you're lucky), other times it won't and the error will go quietly unnoticed.
Example of heap corruption:
1 2 3 4 5 6
int* buf = newint[10]; // make 10 ints
buf[12] = 15; // compiles okay, but bad! 'buf' is not big enough... there is no 12th index
delete[] buf; // might crash here, might not.
// either way, this is *very bad*