2012-08-25 45 views
0

考慮下面的代碼片斷論存儲器動態性質,C++例如

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

這是不可能回答,國際海事組織。 –

+0

這取決於您正在運行的操作系統 - 某些操作系統具有使堆棧內容無法預測的安全功能。 –

+0

@PaulR沒有內容我希望。該位置可能是。 –

回答

4

您試圖訪問的內存塊不是由您的數組和程序合法擁有的。這部分內存將由其他一些進程所擁有。所以每次它擁有不同的價值。有時候你也可能得到同樣的答案。

2

正如你所說,這是不確定的行爲...

一個解釋:你正在閱讀的任意/隨機存儲。誰在讀它之前知道它的用途?

3

爲什麼它應該一致?它是一個非常隨機的計算機內存值。 x並不總是指向相同的位置,並且*(x-10)的內容也會改變。

0

如果你明白結果是不可預知和未定義的,那你爲什麼還認爲它必須一致?在您的記憶之外進行閱讀時,沒有任何保證。它可能會使程序崩潰。