0

考虑以下代码段

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每次运行编译程序时最后始终显示不同的数字?据了解,结果是不可预测的并且是未定义的,但我想它应该是一致的。为什么会改变?

4

5 回答 5

4

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

于 2012-08-25T17:10:46.717 回答
3

为什么要一致?它几乎是您计算机内存的随机值。 x并不总是指向相同的位置和*(x-10)更改的内容。

于 2012-08-25T17:09:05.067 回答
2

正如你提到的,这是未定义的行为......</p>

一种解释:您正在阅读任意/随机内存。在您阅读之前,谁知道它的用途?

于 2012-08-25T17:08:54.460 回答
2

这是未定义的行为。您还可能有地址空间布局随机化 (ASLR)

于 2012-08-25T17:10:54.193 回答
0

如果你明白结果是不可预测的和未定义的,那你为什么还认为它必须是一致的呢?在您的记忆之外阅读时,没有任何保证。它还不如使程序崩溃。

于 2012-08-25T17:09:35.380 回答