首先,當談到C++編程時,我是一名初學者。昨天我遇到了一些相當奇怪的事情。我試圖通過指向它的指針來確定數組的長度。由於sizeof沒有工作,我做了一些谷歌搜索,最終在這個網站上,我發現答案是不可能的。相反,我應該在數組的最後一個索引處放一個超出限制的值,並增加一個計數器,直到達到該索引。因爲我不想覆蓋最後一個索引處包含的信息,所以我試圖在最後一個索引之後放置一個索引超出限制值。我預計它會失敗,但由於某種原因,它沒有。C++:寫入/讀取無效/出界數組索引?
我以爲我犯了一個錯誤別的地方,該陣列是不再那麼我指定以,所以我做了如下試驗:
int a[4];
a[20] = 42;
std::cout << a[20];
輸出爲42沒有任何錯誤。爲什麼這個工作?這應該不是有效的,對吧?更有意思的是,它可以處理任何原始類型的數組。但是,一旦我使用std :: string,程序立即存在1.
任何想法?
+1用於調查問題。請參閱C++方面的[未定義行爲](https://en.wikipedia.org/wiki/Undefined_behavior),並學習一些關於實現端的堆棧變量和彙編。 – Pubby
使用'std :: vector'它有一個'size()'成員(或C++ 11中的std :: array)。 –