【发布时间】:2015-01-27 02:33:08
【问题描述】:
我已经尝试了以下代码。但它总是崩溃。为什么?我什至没有更改地址 0 的内容。 在mingw32-g++上编译
#include<iostream>
int main(){
int* p=0;
std::cout<<*p;
}
【问题讨论】:
-
Why?因为未定义的行为。 -
"我连地址0的内容都没改。"阅读它足以使其成为未定义的行为。在某些情况下,这可能会导致崩溃。
-
我知道这是 C++ 标准的未定义行为。我想知道编译器通常如何处理它@remyabel
-
@Nya,嗯?编译器编写取消引用第零页的程序集,然后您的操作系统(假设您在远程现代操作系统的用户空间中)拒绝将其提供给您,并通过 SIGSEGV 告诉您。编译器实际上并没有在那里做出任何决定。
标签: c++