我在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版本的行为都不同?
使数组非静态会导致行为不同吗?
答案 0 :(得分:3)
Unefined行为未定义。您正在访问数组越界(仅[0]
和[1]
将是有效索引),这意味着任何东西都可以发生。
答案 1 :(得分:0)
ptr[2]
不可用,不同的编译器可能会显示不同的错误答案。
有些编译器会显示0
,而其他一些编译器可能会显示大数字。