簡體   English   中英

C++:寫入/讀取無效/超出范圍的數組索引?

[英]C++: Write to/read from invalid/out of bound array index?

首先,我是 C++ 編程的初學者。 昨天我遇到了一件很奇怪的事情。 我試圖通過指向它的指針來確定數組的長度。 由於sizeof<\/em>不起作用,我做了一點谷歌搜索,最后在這個網站上找到了不可能的答案。 相反,我應該在數組的最后一個索引處放置一個超出界限的值,並增加一個計數器,直到達到這個索引。 因為我不想覆蓋最后一個索引中包含的信息,所以我嘗試將超出界限的值放在最后一個索引之后。 我預計它會失敗,但由於某種原因它沒有。

我認為我在其他地方犯了一個錯誤,並且數組比我分配的要長,所以我做了以下測試:

int a[4];
a[20] = 42;
std::cout << a[20];

您的系統恰好沒有使用距數組地址20 * sizeof(int)字節的內存。 (從一開始。)或者記憶屬於你的過程,因此你可以把它弄亂,要么自己破壞一些東西,要么只是幸運的巧合什么都不破壞。

底線,不要那樣做:)

我認為您需要了解以下內容:
當您創建a[4]時,編譯器為 4 個整數分配內存並在a中記住第一個整數的地址:( *a == &(a[0]) )。
當您讀\\寫時,編譯器不會檢查您是否在界限內(因為他不再擁有此信息)。 只需按以下方式轉到請求的數組單元格的地址: a[X] == &(a + sizeof(int) * X)
在 C++ 中,訪問數組時檢查邊界是程序員的責任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM