數(shù)組越界問題在C 中的分析
數(shù)組是計(jì)算機(jī)程序中常用的一種數(shù)據(jù)結(jié)構(gòu),它可以存儲多個(gè)相同類型的數(shù)據(jù)元素。然而,在使用數(shù)組時(shí),我們必須遵循一些規(guī)定,其中之一就是數(shù)組元素的下標(biāo)值必須為正整數(shù)。 如果我們將數(shù)組元素的下標(biāo)值改成負(fù)數(shù),會發(fā)
數(shù)組是計(jì)算機(jī)程序中常用的一種數(shù)據(jù)結(jié)構(gòu),它可以存儲多個(gè)相同類型的數(shù)據(jù)元素。然而,在使用數(shù)組時(shí),我們必須遵循一些規(guī)定,其中之一就是數(shù)組元素的下標(biāo)值必須為正整數(shù)。
如果我們將數(shù)組元素的下標(biāo)值改成負(fù)數(shù),會發(fā)生什么呢?在C 中,編譯程序后并不會提示錯(cuò)誤,但運(yùn)行程序時(shí)會發(fā)現(xiàn)運(yùn)算結(jié)果是錯(cuò)誤的。這意味著當(dāng)數(shù)組元素的下標(biāo)寫成負(fù)數(shù)時(shí),編譯不會報(bào)錯(cuò),但運(yùn)算結(jié)果會出錯(cuò)。
另外一個(gè)問題是數(shù)組元素的個(gè)數(shù)應(yīng)該在定義的數(shù)組下標(biāo)范圍內(nèi)使用。如果我們讓數(shù)組元素的下標(biāo)超出定義的范圍,會發(fā)生什么呢?同樣地,在編譯程序時(shí)不會出現(xiàn)錯(cuò)誤提示,但在運(yùn)行程序時(shí)可能會出現(xiàn)錯(cuò)誤。也就是說,當(dāng)數(shù)組元素的下標(biāo)超過數(shù)組定義范圍時(shí),編譯不會報(bào)錯(cuò),但運(yùn)行程序時(shí)會出現(xiàn)錯(cuò)誤。
還有一種情況是當(dāng)數(shù)組元素的下標(biāo)值與定義的數(shù)組大小一樣時(shí),也屬于超出定義范圍。因?yàn)閿?shù)組元素的下標(biāo)是從0開始的,所以當(dāng)下標(biāo)值等于數(shù)組大小時(shí),實(shí)際上是訪問了數(shù)組定義之外的存儲空間。
以上兩種情況統(tǒng)稱為數(shù)組越界問題。由于程序在編譯時(shí)會通過,因此很難及時(shí)發(fā)現(xiàn)該錯(cuò)誤。而且,數(shù)組越界可能導(dǎo)致程序在特定條件下出現(xiàn)怪異的運(yùn)行結(jié)果,使程序不按照預(yù)期次序進(jìn)行。
要檢測是否存在數(shù)組越界問題,并沒有特別好的方法,一般采用靜態(tài)檢查法。所謂靜態(tài)檢查就是通過仔細(xì)閱讀代碼,檢查程序是否符合設(shè)計(jì)要求。