Dan*_*iel 1 c++ pointers delete-operator
在下面的代码中,为什么指针保持的地址x在delete?之后改变?据我所知,delete调用应该从堆释放已分配的内存,但它不应该更改指针地址.
using namespace std;
#include <iostream>
#include <cstdlib>
int main()
{
int* x = new int;
*x = 2;
cout << x << endl << *x << endl ;
delete x;
cout << x << endl;
system("Pause");
return 0;
}
OUTPUT:
01103ED8
2
00008123
Run Code Online (Sandbox Code Playgroud)
观察:我使用的是Visual Studio 2013和Windows 8.据说这在其他编译器中不起作用.此外,我理解这是不好的做法,我应该在删除指针后重新指定NULL,我只是想了解是什么驱使这种奇怪的行为.
小智 5
据我所知,deletecall应释放堆中分配的内存,但不应更改指针地址.
好吧,为什么不呢?这是完全合法的输出 - 在删除指针后读取指针会导致未定义的行为.这包括指针的值改变.(事实上,这甚至不需要UB; deleted指针可以真正指向任何地方.)