Переменные содержат значения. Значения указателя - это просто значения. Не имена. Не переменные.
Когда вы манипулируете значением указателя, например, чтобы передать его в delete
, вы заботитесь только о значении.
Это, по сути, эквивалентно:
int one=1;
one=2;
std::cout << one; // you won't be surprised to see 2, will you?
Значение в настоящее время в переменной имеет значение; не какое-то предыдущее значение. Не имя.
Ваша программа пытается освободить (delete
) объект, который был выделен не вами (пользователем), а компилятором.