微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++:删除动态变量

如何解决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 举报,一经查实,本站将立刻删除。