空指针和应用程序崩溃
Null pointers and application crashing
这更像是一个理论问题。为什么 C++ 应用程序在遵循空指针时崩溃?
崩溃机制是故意保护运行应用程序的系统,还是来自语言核心的不可避免的事实?如果是后者,将来是否可以预期自动处理空指针?
C++应用程序在遵循空指针时可能会崩溃。C++标准中没有任何内容说他们会这样做。取消引用空指针的尝试会调用所谓的"未定义行为",这意味着标准拒绝说明可能发生的情况。
至于为什么大多数情况下会导致崩溃,大多数编译器作弊并在字节 0 处制作一个空指针点,并且许多操作系统使地址 0 不可写(有时也不可读(,因此尝试访问地址会触发处理器故障。
至于自动处理问题,这正是触发故障的重点。(另一种方法是让程序横行运行。在那之后,没有进一步的自动化可以完成 - 程序已经脱轨并且不可信,操作系统无法知道您试图指向什么。
为什么 C++ 应用程序在遵循空指针时崩溃?
。
还是一个不可避免的事实,它来自语言的核心?
该标准并未规定平台应该/必须如何处理访问空指针。这只是未定义的行为。当您关注/取消引用空指针时,平台可以自由选择对他们有意义的任何操作。
取消引用空指针的崩溃是因为操作系统将无效页面映射到接近 0 的地址,因此在操作系统下运行的程序将在取消引用空指针时崩溃,而不是损坏其数据。没有任何内容表明操作系统这样做,如果您的代码在没有操作系统(嵌入式或裸机(的情况下运行,那么地址 0 处可能存在内存,可以通过写入空指针来损坏。
如果是后者,将来是否可以预期自动处理空指针?
除非C++作为一种语言会走向完全不同的方向。目前C++标准说你可以从有效的程序中得到什么,它没有指定当你的程序行为不端时会发生什么,所以我不希望对这种情况或其他导致UB的情况进行任何标准的额外处理。有些平台可能会也可能不会执行一些自动操作,但我怀疑它是否会成为这种语言的标准方式。
- 使用调试/崩溃报告将应用程序部署到客户端
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么从文件获取图标时应用程序有时会崩溃?
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- Qt应用程序找不到第三方DLL并崩溃
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- QCompleter set模型使应用程序崩溃
- Qt 5 应用程序崩溃并出现"qLineEdit::setText"
- 切换NvAPI_Stereo_Deactivate/NvAPI_Stereo_activate会使unity应用程序崩溃
- Opencv在2013年第5季度不起作用.应用程序总是在窗口中崩溃
- eglSwapBuffers上的应用程序崩溃
- C 多线程崩溃应用程序
- 加载的 obj 模型闪烁并崩溃应用程序
- strcats func 崩溃应用程序
- 生成的Protobuf代码崩溃应用程序
- C++字符串::查找崩溃应用程序
- av_free随机崩溃应用程序-FFMPEG C++