VS 2008和VS 2017中静态文件的不同行为

时间:2018-06-11 09:51:04

标签: c++ visual-studio visual-c++

我在Visual 2008和2017中编写了完全相同的代码行。我的输出结果不同。

int main()
{

 static int  arr[] = {1,2};

 int * ptr = arr;
 int val = ptr[2];

 cout<<val;
 return 0;
}

Visual Studio 2017中的输出,

  

39029

Visual Studio 2008中的输出,

  

0

另外,在调试中,我在两个Visual Studio中都得到0。

为什么Visual Studio的两个版本对Release版本的行为都不同?

使数组非静态会导致行为不同吗?

2 个答案:

答案 0 :(得分:3)

Unefined行为未定义。您正在访问数组越界(仅[0][1]将是有效索引),这意味着任何东西都可以发生。

答案 1 :(得分:0)

ptr[2]不可用,不同的编译器可能会显示不同的错误答案。

有些编译器会显示0,而其他一些编译器可能会显示大数字。