Se ho il seguente programma

int main(){
int* p= new int;
*p = 10;
delete p; // ok marca come libera la zona usata da p e la rende
// riallocabile

delete p //ERRORE

}

perchè c'è errore se faccio la seconda delete? forse perchè mi rende libera una zona già libera e per questo la zona puo essere puntata da due puntatori?