필자가 읽은 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....
delete가 호출 될 때 포인터가 가리키는 주소는 분명히 변경됩니다!
왜 이런 일이 발생합니까? 이것은 Visual Studio와 관련이 있습니까?
그리고 delete가 어쨌든 가리키는 주소를 변경할 수 있다면 왜 NULL
임의의 주소 대신 포인터를 자동으로 설정하지 않습니까?