考虑以下代码段
int x[] = {1,2,3};
cout << *x << endl; // 1
cout << *(x+1) << endl; // 2
cout << *(x-10) << endl; // Different number each time i run the program
为什么每次运行已编译的程序时,最后cout
始终显示不同的数字?据了解,结果是不可预测的,并且未定义,但我认为它应该是一致的。为什么会改变?
答案 0 :(得分:4)
您尝试访问的内存块不是您的阵列和程序合法拥有的。这部分内存将由正在进行的其他进程拥有。所以每次它都有不同的价值。也有可能在其他时间得到相同的答案。
答案 1 :(得分:3)
为什么要保持一致?它是您计算机内存的随机值。 x
并不总是指向同一位置,*(x-10)
的内容也会发生变化。
答案 2 :(得分:2)
如你所说,这是未定义的行为......
一个解释:你正在阅读任意/随机记忆。在你阅读它之前谁知道它的用途?
答案 3 :(得分:2)
这是未定义的行为。您也可能有Address space layout randomization (ASLR)
答案 4 :(得分:0)
如果您了解结果不可预测且未定义,那么为什么您还认为它必须一致?在外面阅读时,无法保证任何事情。它可能会破坏程序。