C++中悬垂指针(delete后指针)仍然可以访问所指内存的问题
C++中悬垂指针(delete后指针)仍然可以访问所指内存的问题
在指针被delete
之后,此时指针被称为空悬指针或者悬垂指针,即指向一块曾经保存数据对象,但现在已经无效的内存的指针。
在C++编程中,当我们delete
一个指针后,指针所指向的堆地址空间便被释放,指针值变成无效,该内存可以用于之后的内存分配。
但是虽然该指针已经无效,但在很多机器上该指针仍然保存着已经被释放了的动态内存地址(并且内存地址中的值也并未被擦除),因此此时该指针仍然能用于操作这块内存,但这么做是不合理的,也极度不安全。
因此,正确的做法是在使用delete
了一个指针之后,及时将该指针置为nullptr
class Drived { public: Drived() { std::cout << "Drived构造函数" << std::endl; } ~Drived() { std::cout << "Drived析构函数" << std::endl; } void func() { std::cout << "Drived的func" << std::endl; } }; int main() { Drived* obj = new Drived(); std::cout << obj << std::endl; obj->func(); delete obj; obj->func(); std::cout << obj << std::endl; int* p = new int(2); std::cout << *p << std::endl; delete p; std::cout << *p << std::endl; return 0; } /* Drived构造函数 0x6aff40 Drived的func Drived析构函数 Drived的func 0x6aff40 2 7004736 */
本文作者:3的4次方
本文链接:https://www.cnblogs.com/3to4/p/17738302.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步