考虑以下代码段
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
每次运行编译程序时最后始终显示不同的数字?据了解,结果是不可预测的并且是未定义的,但我想它应该是一致的。为什么会改变?
您尝试访问的内存块不是您的阵列和程序合法拥有的。那部分内存将由其他正在进行的进程拥有。所以每次它都有不同的价值。您也有可能在其他时间得到相同的答案。
为什么要一致?它几乎是您计算机内存的随机值。 x
并不总是指向相同的位置和*(x-10)
更改的内容。
正如你提到的,这是未定义的行为......</p>
一种解释:您正在阅读任意/随机内存。在您阅读之前,谁知道它的用途?
这是未定义的行为。您还可能有地址空间布局随机化 (ASLR)
如果你明白结果是不可预测的和未定义的,那你为什么还认为它必须是一致的呢?在您的记忆之外阅读时,没有任何保证。它还不如使程序崩溃。