What happens when you deallocate a pointer twice or more in C++?
It's undefined behavior, so anything can happen.
What's likely to happen is bad. Typically, the free store is a carefully managed system of free and allocated blocks, and new
and delete
do bookkeeping to keep everything in a consistent state. If you delete
again, the system is likely to do the same bookkeeping on invalid data, and suddenly the free store is in an inconsistent state. This is known as "heap corruption".
Once that happens, anything you do with new
or delete
may have unpredictable results, which can include attempting to write outside the application's memory area, silently corrupting data, erroneously thinking there's no more memory, or double or overlapping allocation. If you're lucky, the program will crash soon, although you'll still have problems figuring out why. If you're unlucky, it will continue to run with bad results.
You get undefined behaviour if you try to delete
an object through a pointer more than once.
This means that pretty much anything can happen from 'appearing to work' to 'crashing' or something completely random.