嘗試以下32位的Ubuntu虛擬機上的代碼:爲什麼數組的內存地址總是增加?
static int a[0x1f0fff];
cout << &a[0x600000] << endl;
cout << &a[0x800000] << endl;
cout << &a[0x8fff00000] << endl;
0x984a140
0xa04a140
0x7c4a140
真的很困惑,該地址不繼續增加。
該數組位於堆,並打印什麼是虛擬內存地址。是因爲它超過了虛擬內存空間嗎?
此外,根據another answer,最後兩行代碼是索引到未分配內存的一部分。爲什麼沒有報告段錯誤?
「爲什麼沒有報告段錯誤?」當程序訪問尚未分配的內存時會發生Segfaults錯誤。沒有段錯誤並不意味着你的程序是好的。只要你做錯了什麼,程序就不需要崩潰。 – xaxxon
沒有保證。這是未定義的行爲。 –
不要低估問題,因爲你認爲某人應該已經知道答案。如果您不滿意問題,請評論爲什麼。 – xaxxon