for迴圈中的陣列越界陷阱

2021-08-20 15:19:26 字數 578 閱讀 5731

for(unsigned int k = vector.size() - 1; k >= 0; k--){}

此處會報陣列越界,原因是k為unsigned int型別,迴圈最後一次判別時k<0,會變為該型別的最大值。同時,應注意vector.size()的返回值也是unsigned int型別,也存在類似風險。

解決方法是:在反序遍歷陣列時,k使用int型別,vector.size()加強制型別轉換----(int)vector.size()。

for(int k = 0; k < vector.size() - 1; k++)

cout << vector[i] << vector[i+1];

很多時候,我們會用到類似於以上迴圈。這種情況下,vector中元素數量不足時,會出現陣列越界現象。

原因:vector.size()型別為size_t(unsigned int),若vector.size()小於1,則vector.size() - 1的結果變為size_t型別的最大值。

解決方法:將size_t型別強制轉換為int-----for(int k = 0; k < (int)vector.size() - 1; k++)。

strcat的記憶體越界陷阱

一下 段裡,char szplanchange 500 未初始化,會導致在strncat進行字串連線的時候因為沒有在字元陣列範圍內找到字串結束符 0 而出現記憶體操作越界的問題。乙個實際的結果是導致delete pstarttime 的時候失敗,為區域性指標變數pstarttime 的位址已經被st...

陣列越界出現死迴圈問題

1 include 2 3int main 4 7for i 3 i 11return0 12 執行 是會陷入輸出hello world的死迴圈。原因是陣列越界,a 3 的位址指向了變數i的位址。這讓我疑惑,為什麼a 3 的位址指向變數i的位址?經過大佬的解釋 才理解。因為會進行8位元組對齊,i的位...

在迴圈中獲取索引 陣列下標

有人知道如何獲取列表的索引值嗎 ints 8,23,45,12,78 當我迴圈這個列表時如何獲得它的索引下標?如果像c或者php那樣加入乙個狀態變數那就太不pythonic了.最好的選擇就是用內建函式enumerate for i in range 0,len list print i list i...