// Reserve some memory for an int and set that memory to the value 43.
int* P1 = new int(43);
// Print the address of the reserved memory.
cout<<"P1 = "<<P1<<endl;
// Print the contents of that memory.
cout<<"*P1 = "<<*P1<<endl;
// Free the memory - it is no longer reserved to you.
delete P1;
// int* P2 = new int(47);
// Print the address of the memory. It still holds the address to
// the memory that used to be reserved for you.
cout<<"P1 = "<<P1<<endl;
// Print the current value of the memory that used to be reserved.
cout<<"*P1 = "<<*P1<<endl;
Если вы раскомментируете строку P2, вполне вероятно, что ей будет назначена та же память, которая изменит значение, напечатанное в последней строке.
Доступ к памяти, которая была освобождена с помощьюdelete
вызывает неопределенное поведение , как отмечали другие.Undefined включает в себя странные сбои в некоторых случаях (возможно, только в полнолуние? ;-).Он также включает в себя все, что работает на данный момент на отлично, но с ошибкой, которая может быть моей, которая может сработать всякий раз, когда вы делаете другое изменение где-либо еще в вашей программе.
Лек памяти - это когда вы выделяете память с помощью new
и никогда не освобождай его с помощью delete
.Обычно это не будет замечено, пока кто-то не запустит вашу программу в течение более длительного периода времени и не обнаружит, что она пожирает всю память системы.