关于内存的动态性,C ++的例子

时间:2012-08-25 17:02:49

标签: c++ memory

考虑以下代码段

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始终显示不同的数字?据了解,结果是不可预测的,并且未定义,但我认为它应该是一致的。为什么会改变?

5 个答案:

答案 0 :(得分:4)

您尝试访问的内存块不是您的阵列和程序合法拥有的。这部分内存将由正在进行的其他进程拥有。所以每次它都有不同的价值。也有可能在其他时间得到相同的答案。

答案 1 :(得分:3)

为什么要保持一致?它是您计算机内存的随机值。 x并不总是指向同一位置,*(x-10)的内容也会发生变化。

答案 2 :(得分:2)

如你所说,这是未定义的行为......

一个解释:你正在阅读任意/随机记忆。在你阅读它之前谁知道它的用途?

答案 3 :(得分:2)

这是未定义的行为。您也可能有Address space layout randomization (ASLR)

答案 4 :(得分:0)

如果您了解结果不可预测且未定义,那么为什么您还认为它必须一致?在外面阅读时,无法保证任何事情。它可能会破坏程序。