空指针和应用程序崩溃

Bal*_*lgy 2 c++ pointers

这更像是一个理论问题.为什么c ++应用程序在跟踪空指针时会崩溃?

崩溃机制是否有意保护应用程序正在运行的系统,或者来自语言的核心的一个不可避免的事实?如果是后者,那么将来可以预期的空指针的自动处理是什么?

R S*_*ahu 5

为什么c ++应用程序在跟踪空指针时会崩溃?

...

还是一个不可避免的事实来自语言的核心?

该标准没有规定平台应该/必须如何处理访问空指针.这只是未定义的行为.当您关注/取消引用空指针时,平台可以自由选择对它们有意义的任何操作.


cHa*_*Hao 5

跟随空指针时,C++应用程序可能会崩溃.C++标准中没有任何内容表明它们会.尝试取消引用空指针会调用所谓的"未定义行为",这意味着标准拒绝说出会发生什么.

至于为什么大多数情况会导致崩溃,大多数编译器作弊并在字节0处产生空指针点,并且许多操作系统使地址0不可写(有时也不可读),因此尝试访问地址会触发处理器故障.

至于自动处理问题,这正是触发故障的关键.(另一种方法是让程序无法运行.)在这一点上没有进一步的自动化 - 程序已经脱轨并且无法信任,操作系统无法知道你是什么试图指出.