Возможный дубликат:
C++ delete - удаляет мои объекты, но я все еще могу получить доступ к данным?
Можно ли получить доступ к памяти локальной переменной за пределами ее объема?
Я не понимаю, что действительно делает delete
, когда я хочу освободить выделенную память new
. В книге C++ Premiere написано:
Это удаляет память, на которую указывает указатель ps; он не удаляет сам указатель ps. Вы можете повторно использовать ps, например, чтобы указать на другое новое распределение. Вы всегда должны балансировать использование нового с использованием delete; в противном случае вы можете завершить утечку памяти, то есть память, которая была выделена, но больше не может использоваться. Если утечка памяти становится слишком большой, она может привести к остановке работы программы.
Таким образом, я понимаю, что delete
должен удалить значение в памяти, к которому относятся точки pinter. Но это не так. Здесь мой эксперимент:
int * ipt = new int; // create new pointer-to-int
cout << ipt << endl; // 0x200102a0, so pointer ipt points to address 0x200102a0
cout << *ipt << endl; // 0, so the value at that address for now is 0. Ok, nothing was assigned
*ipt = 1000; // assign a value to that memory address
cout << *pt << endl; // read the new value, it is 1000, ok
cout << *((int *) 0x200102a0) << endl; // read exactly from the address, 1000 too
delete ipt; // now I do delete and then check
cout << ipt << endl; // 0x200102a0, so still points to 0x200102a0
cout << *ipt << endl; // 1000, the value there is the same
cout << *((int *) 0x200102a0) << endl; // 1000, also 1000 is the value
Итак, что действительно делает delete
?