我知道下面的代码不正确,因为我正在为任意地址赋值.
#include <iostream>
using namespace std;
int main()
{
int *i;
*i = 12; // Not right.... i is not initialized.
cout << *i << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码在Linux上给出了分段错误.但是,在Windows上输出12 ...
为什么它可以在Windows上运行?我没有将12分配到某个任意位置我的程序没有特权吗?
Naw*_*waz 12
它实际上调用了未定义的行为.所以这两种行为都是正确的,即它可能会产生段错误,或者可能不会.
在下一次运行中,Windows版本可能会崩溃,Linux版本可能会向您发送威胁邮件!
换句话说,任何事情都可能发生.C++规范和(符合标准的)编译器都没有给出任何保证,这就是C++规范将这种行为称为未定义行为的原因.