Một cuốn sách C ++ tôi đã đọc được rằng khi một con trỏ bị xóa bằng delete
toán tử, bộ nhớ tại vị trí mà nó đang trỏ đến là "được giải phóng" và nó có thể bị ghi đè. Nó cũng nói rằng con trỏ sẽ tiếp tục trỏ đến cùng một vị trí cho đến khi nó được gán lại hoặc được đặt thành NULL
.
Trong Visual Studio 2012 tuy nhiên; Điều này dường như không phải là trường hợp!
Thí dụ:
#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;
}
Khi tôi biên dịch và chạy chương trình này, tôi nhận được kết quả sau:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Rõ ràng địa chỉ mà con trỏ đang trỏ đến thay đổi khi xóa được gọi!
Tại sao chuyện này đang xảy ra? Điều này có liên quan gì đến Visual Studio không?
Và nếu xóa có thể thay đổi địa chỉ mà nó đang trỏ đến dù sao, tại sao xóa sẽ tự động đặt con trỏ thành NULL
thay vì một số địa chỉ ngẫu nhiên?