Книга C ++, яку я читав, говорить про те, що при видаленні вказівника за допомогою delete
оператора пам'ять у місці, на яке він вказує, "звільняється", і його можна перезаписати. Тут також зазначено, що покажчик продовжуватиме вказувати на те саме місце, поки не буде призначений або встановлений на нього NULL
.
Однак у Visual Studio 2012; це, мабуть, не так!
Приклад:
#include <iostream>
using namespace std;
int main()
{
int* ptr = new int;
cout << "ptr = " << ptr << endl;
delete ptr;
cout << "ptr = " << ptr << endl;
system("pause");
return 0;
}
Коли я компілюю і запускаю цю програму, я отримую такий результат:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Очевидно, що адресу, яку вказує вказівник на зміни при видаленні, викликається!
Чому це відбувається? Чи має це щось спільне з Visual Studio?
І якщо delete може змінити адресу, на яку він вказує, будь-коли, чому б не видалити автоматично встановити покажчик NULL
замість якоїсь випадкової адреси?