【发布时间】:2021-04-29 08:44:04
【问题描述】:
我在删除代码中的指针时遇到问题。
这是代码:
int *x=new int;
int a=5;
x=&a;
cout << *x << endl;
delete x;
cout << *x;
你为什么不删除指针,然后悄悄地打印第二个 cout?
【问题讨论】:
-
如果删除指针,如何访问该位置?因此第二个
cout << *x;会抛出错误无效访问! -
这能回答你的问题吗? Deleting a pointer in C++
-
您的
delete x;行无效 - 您已将不同的值重新分配给指针(a的地址)在new行之后,所以您有丢失了该分配返回的地址。 -
delete不会删除指针,它会删除指针指向的对象,并且该对象必须是用new创建的。在您说x = &a之后,x不再指向这样的对象,而是指向具有自动存储功能的对象,并且将这样的指针传递给delete具有未定义的行为。