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

时间:2016-07-15 17:45:59

标签: c++ pointers

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

4 个答案:

答案 0 :(得分:4)

  

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

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

  

......在无限循环中?

这没什么区别。

答案 1 :(得分:0)

在这种情况下,程序具有未定义的行为。如果指针由0初始化,则全部为O'

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您已经使用delete提到了deletenew这个词,所以在您的情况下,当您删除未初始化的指针时,结果将是 未定义的行为(UB)

你在无限循环中这样做: 你只是增加了UB的几率!

您可以在memory management上阅读有关https://isocpp.org的更多信息 double-delete-disaster