如何解决C++:删除动态变量
两者有什么区别
{p = NULL ;}
和
{Delete p; }
当我执行这段代码时:
int *p ;
p = new int;
* p = 4;
cout << *p; // = 4
delete p ;
cout << *p; //
在最后一行中,我希望得到一个垃圾值,因为指针不再指向同一个位置,对吗?但相反,我得到了相同的值,即 4,这怎么可能?
解决方法
p = NULL;
只是将 p
设置为 NULL,但对 p
指向的内存没有任何作用。
delete p;
释放 p
指向的内存,前提是该内存是用 new
分配的(如您的示例中所示)。
在您的示例中,在调用 *p
后尝试访问 delete p;
是未定义行为,因此任何事情都可能发生。 p
仍然指向与之前相同的地址,delete
不会以任何方式改变 p
本身,但是 p
指向的内存不再有效.您碰巧看到存储在该内存中的旧数据,但这仅仅是因为它尚未被覆盖。但是仍然不允许以任何理由访问无效内存。实际内存仍由底层内存管理器物理分配,但逻辑对于您的代码是不可访问的,直到它再次重新分配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。