我是一個學生,本學期要學習C ++中的數據結構課程,并且遇到了今晚不太了解的內容。假設我要創建一個指向堆上數組的指針:int* arrayPtr = new int [4];我可以使用指針語法訪問此數組int value = *(arrayPtr + index);但是,如果我要在為數組分配的空間結束后立即向內存位置添加另一個值,則可以訪問它*(arrayPtr + 4) = 0;int nextPos = *(arrayPtr + 4);//the value of nextPos will be 0, or whatever value I previously filled that space with*(arrayPtr + 4)在內存中的位置超過了為數組分配的空間的末尾。但是據我了解,以上內容仍然不會造成任何問題。因此,除了C ++的要求外,為什么還要在聲明數組時給它們指定特定的大???
3 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊
當您超過分配的內存的末尾時,實際上就是在訪問其他對象的內存(或現在可用的內存,但是以后可能會更改)。所以,這會給您帶來麻煩。特別是如果您嘗試為其編寫一些內容。

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
我可以使用指針語法訪問此數組
int值= *(arrayPtr +索引);
是的,但是不要。采用arrayPtr[index]
*(arrayPtr + 4)在內存中的位置超過了為數組分配的空間的末尾。但是據我了解,以上內容仍然不會造成任何問題。
你理解錯了。哦,太錯了。您正在調用未定義的行為,未定義的行為是未定義的。它可能工作一周,然后在下周休息一天,您將不知道為什么。如果您事先不知道集合的大小,請使用諸如a vector
之類的動態變量代替數組。
- 3 回答
- 0 關注
- 688 瀏覽
添加回答
舉報
0/150
提交
取消