用我们的决心、信心和毅力来培植我们的生命之花🍀|

3的4次方

园龄:2年1个月粉丝:5关注:89

📂C++
🔖C++
2023-09-30 21:51阅读: 61评论: 0推荐: 0

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 中国大陆许可协议进行许可。

posted @   3的4次方  阅读(61)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起