歡迎來到培訓(xùn)無憂網(wǎng)!

全國(guó)切換

咨詢熱線 400-001-5729

位置:培訓(xùn)無憂網(wǎng) > 新聞資訊 > 電腦/IT > c語(yǔ)言 >  C語(yǔ)言培訓(xùn)問答之為什么沒有數(shù)組下標(biāo)越界檢查?

C語(yǔ)言培訓(xùn)問答之為什么沒有數(shù)組下標(biāo)越界檢查?

來源:m.universityresearchassociates.com 發(fā)布人:星星

2021-12-24 11:03:27|已瀏覽:135次

數(shù)組下標(biāo)越界檢查

      各位,相信你們對(duì)數(shù)組的使用已經(jīng)再熟悉不過了,不過大家有沒有想過數(shù)組使用的越界問題,換句話說,C對(duì)數(shù)組的長(zhǎng)度范圍會(huì)進(jìn)行檢查嗎?

      答案是不會(huì)。因此當(dāng)向數(shù)組越界寫入數(shù)據(jù)的時(shí)候,經(jīng)常產(chǎn)生“內(nèi)存被破壞”的問題。如果在較早的階段,操作系統(tǒng)發(fā)現(xiàn)異常并且提示Segmentation fault,或者“強(qiáng)制關(guān)閉異常的應(yīng)用程序”。但此時(shí)相鄰變量的值已經(jīng)被破壞,程序卻還在繼續(xù)運(yùn)行,那后果就不可想象了。既然這樣,為什么C標(biāo)準(zhǔn)還是不會(huì)去檢查呢?
       有人說頻繁地進(jìn)行范圍檢查會(huì)影響效率,但至少應(yīng)該讓我們?cè)诰幾g的時(shí)候可以使用一個(gè)選項(xiàng),以便要求編譯器在調(diào)試模式下編譯程序的時(shí)候,幫我們實(shí)施數(shù)組下標(biāo)范圍的檢查。有這樣的想法的人,不只是我一個(gè)吧。但是,請(qǐng)稍微再想一想這個(gè)問題。對(duì)于C來說,當(dāng)數(shù)組出現(xiàn)在表達(dá)式中的時(shí)候,它會(huì)立刻被解讀成指針。此外,使用其他的指針變量也可以指向數(shù)組的任意元素,并且這個(gè)指針可以隨意進(jìn)行加減運(yùn)算。引用數(shù)組元素的時(shí)候,雖然你可以寫成a[i],但是它只不過是*(a+i)的一種表達(dá)。
       還有,當(dāng)你向一個(gè)函數(shù)傳遞數(shù)組的時(shí)候,實(shí)際上你傳遞的是一個(gè)指向初始元素的指針。如果這個(gè)函數(shù)還存在于其他的代碼文件中(另外一個(gè)編譯單元),那么通過編譯器是不可能追蹤到數(shù)組的。要求這樣的語(yǔ)言在編譯時(shí)生成檢查數(shù)組長(zhǎng)度的代碼,是不是有些強(qiáng)人所難?其實(shí)如果你一定要進(jìn)行數(shù)組長(zhǎng)度檢查,可以考慮將指針封裝成結(jié)構(gòu)體那樣,運(yùn)行時(shí)讓指針自身持有可取值范圍的信息?墒沁@么做對(duì)性能的影響很大,同時(shí),也喪失了非調(diào)試模式下編譯后的庫(kù)和指針的兼容性。

       因此C不會(huì)對(duì)數(shù)組進(jìn)行越界檢查,實(shí)際上,除了某些解釋型的編程語(yǔ)言之外,目前幾乎沒有編譯器可以為我們做數(shù)組的越界檢查。這就對(duì)我們寫代碼的提出了一些要求,那大家以后就要注意了!

       本文由培訓(xùn)無憂網(wǎng)達(dá)內(nèi)教育專屬課程顧問老師整理發(fā)布,更多C語(yǔ)言課程信息可關(guān)注培訓(xùn)無憂網(wǎng)C語(yǔ)言培訓(xùn)頻道或添加老師微信:15033336050

      注:尊重原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處和鏈接 http://m.universityresearchassociates.com/news-id-9752.html 違者必究!部分文章來源于網(wǎng)絡(luò)由培訓(xùn)無憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實(shí)性請(qǐng)自行核實(shí)或聯(lián)系我們,了解更多相關(guān)資訊請(qǐng)關(guān)注c語(yǔ)言頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費(fèi)申請(qǐng)?jiān)囌n。關(guān)注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會(huì)一對(duì)一幫助你規(guī)劃更適合你的專業(yè)課程!
  • 姓名:

  • 手機(jī):

  • 地區(qū):

  • 想學(xué)什么:

  • 培訓(xùn)無憂網(wǎng)
免 費(fèi) 申 請(qǐng) 試 聽
提交申請(qǐng),《培訓(xùn)無憂網(wǎng)》課程顧問老師會(huì)一對(duì)一幫助你規(guī)劃更適合你的專業(yè)課程!