在无限循环中删除未初始化的指针变量时会发生什么情况

What happens when an uninitialised pointer variable is deleted in an infinite loop?

本文关键字:变量 什么情况 指针 无限循环 删除 初始化      更新时间:2023-10-16

假设如果我执行一个无限循环(哨兵),其中有一个未初始化的指针,每次执行循环后都会被删除,所以问题是,指针是否有可能访问用于运行计算机的系统变量?好吧,我搜索了它的答案,并找到了一个关于悬空指针的接近答案,但答案没有指定它是否可以访问系统变量,即使有,也可以删除它以导致计算机出现问题是不可修复的?编辑:(我想我对读者的怀疑造成了错误的印象,我从来没有真正打算做或已经做过,但如果出现这种情况会发生什么?是我的问题。

删除未初始化的指针变量时会发生什么...

假设"删除"是指类似delete ptr;,则行为是未定义的。如果你问X是否可能发生,答案是肯定的,对于X的任何物理可能值。 (操作系统具有防止单个程序的恶意行为的保护措施。这些保护措施不是100%可靠的。

。在无限循环中?

这没什么区别。

在这种情况下,程序具有未定义的行为。如果指针由 0 初始化,则一切正常。

这取决于操作系统。对于好的旧DOS,这是可能的,尽管不太可能(很可能您的PC会崩溃,所以您只需要重新启动),对于现代操作系统来说,这几乎是不可能的,因为正常的进程内存与系统隔离并且您无法访问它。尽管某些程序可以利用安全漏洞来修改系统数据,但这不太可能通过随机行为不良的过程发生。

你提到了delete这个词,你delete你使用new分配的内容,所以在你的情况下,当你删除一个未初始化的指针时,结果将是未定义的行为(UB)。

在一个无限循环中这样做:你只是在增加UB的机会!

您可以在 https://isocpp.org
上阅读有关内存管理的更多信息双重删除灾难

相关文章: