陣列越界問題
阿新 • • 發佈:2018-11-06
陣列是常用的儲存結構,適用範圍廣,但在使用時經常會出現諸多問題,而在這些問題裡最麻煩的問題便是陣列越界問題,所以今天我們來看看 1.陣列的儲存方式;2.陣列越界問題的定義;3.陣列越界問題為什麼最麻煩;4.我們應該怎麼規避預防越界問題;
- 陣列的儲存問題:
[1] 區域性變數:定義在函式體內部的變數,記憶體區域在棧裡。
[2]棧:棧是一種特殊的儲存方式,遵循先進後出原則,就像一個缸一 樣,下端稱為棧底,存放大地址;上端稱為棧頂,存放小地址。
[3]變數儲存規則:先定義的地址大,放在棧底。在給陣列分配空間時是一次性給一大塊,數組裡的地址大小為a[0]<a[1],因為每次都有個i++,所以地址在增大,前面的放在棧頂,最後的放在下面(地址大)。
e.g:
int main()
{
int i;//先定義,放在棧底
int arr[10];//元素地址逐漸增加
- 陣列越界的定義:
你給陣列只定義了十個長度,從a[0]~a[9],但你想給a[10]賦值,計算機找不到這個空間,若有變數在a[9]下面,則給a[10]的值便會覆蓋掉i。這便稱為越界問題。
for(i=0;i<=10;i++)//陣列中並沒有a[10],所以a[10]=0,不存在的
{
arr[i]=0; //i在a[9]下面,故讓i=0了,所以i<10,i++,會陷入無限迴圈中
printf("%d",i);
}
3. 陣列問題為什麼麻煩呢?
其一,出現這種問題程式會出現死迴圈,程式設計師根本無從下手,因為它沒有報錯,2012編譯器則會出現崩潰,還好一點。
其二,專案多人合作完成,若上一個的程式碼中有越界問題,會嚴重影響下一段程式碼。
- 怎麼規避預防越界問題?
其實2012編譯器已經給出了辦法,那就是在陣列和其他變數中間放幾個炸彈,若越界則程式崩潰。這樣就可以阻止它無限迴圈和改變位於陣列下面的變數的值。
一定要謹記陣列不能越界,不然會有大麻煩的。