C++常见问题:delete字符使用容易混淆的点

文章详细解释了C++中动态内存分配和释放的过程,强调了使用new创建内存后,delete释放内存并不影响指针本身,而是释放指针指向的对象。删除后未将指针置空可能会导致悬垂指针,为保证安全,通常会在delete后将指针设为nullptr。
摘要由CSDN通过智能技术生成

        我们在用动态内存分配时,经常是用new来定义一块内存空间,比如说 int* p = new int(1);这时会在堆上分配一块内存,当作int类型使用,内存中存储的值为1并将内存地址赋值给在栈中的int*类型的p。(注意:p只是一个变量,就像是int a = 1中的a一样,不过a是整形变量,而p是指针变量)
        当我们不用p指针时,往往需要用delete p将其释放,我们需要注意的是释放一个指针(delete p; )实际意思是删除了p所指的目标(变量或对象),释放了它所占的堆空间,而不是删除p本身(指针p指针变量本身内存并没有被释放,它自己仍然存在,该指针所占内存空间并未释放,指针p的真正释放是随着函数调用的结束而消失),释放堆空间后,p成了"空指针"。如果我们在delete p后没有进行指针p的制空(p = NULL)的话,其实指针p这时会成为野指针,为了使用的安全,我们一般在delete p之后还会加上p = NULL这一语句。

 仅作笔记使用,侵权联删,以上原作者:

ai_yue的博客_CSDN博客-算法设计与分析,Java,操作系统领域博主

以下来源于openai ChatGPT4

当你调用“delete时,你并不是清空指针变量指向的数据,而是让操作系统知道你不再需要这块内存,操作系统可以在需要时重新分配这块内存给其他程序或者其他部分的代码。实际上,“delete”后数据可能仍然在内存中,但是再去访问这些数据是不安全的,因为操作系统可能已经把这块内存分配给了其他地方
此外,“delete’不会改变指针本身的值 (也就是所谓的堆区地址) 。指针仍然指向那块内存,但是那块内存已经被释放,不再属于你的程序。这样的指针通常被称为“悬垂指针”,对这样的指针进行解引用是非常危险的,因为它可能会导致未定义的行为。
在C++中,一种常见的做法是在“delete’一个指针之后,立即将其设置为nullptr’,这样就可以避免使用悬垂指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值