C陣列下標越界

2022-03-16 10:19:08 字數 539 閱讀 9198

之前總聽說c語言的各種毛病,今天算是遇到乙個:陣列下標越界

兩段完成不相干的**,一段是測溫度的,一段是測轉速的。兩段**單獨執行都沒有問題,但是若執行測轉速的**,測溫度的資料就會發生錯誤。

一步檢視,發現執行測轉速之後,測溫度的**中的乙個變數和乙個資料的值就會發生詭異的錯誤

陣列下標越界

這個越界非常不明顯,**如下:

gratingpulsewidth[gratingindex] = pusewidth;
其中gratingindex在其他的**中有條件歸零。萬萬沒想到的是,這個歸零條件不是總會觸發,所以就發生越界了。

事實上這份程式執行很久都沒出過問題,可能因為越界不一定會造成影響吧,正是因為這樣才可怕!!!

對陣列進行操作,一定要進行越界判斷!!!

if(gratingindex < grating_amount)

gratingpulsewidth[gratingindex] = pusewidth;

陣列下標越界

原理 因為c語言不會檢測陣列下標,所以如果我們給陣列乙個超出它大小的下標,就會照成陣列越界。如果是想陣列中寫入資料的話,就會造成資料寫入到不屬於陣列的地方,或者說如果讀取資料的話,就會讀取到別的地方的資料。因為陣列位址是自低往高增長,而棧的位址是自高向下降低,所以如果我們將陣列下標根據棧內的空間的分...

搬運 C 下標越界後

搬運 因為原來的部落格要關,所以從原來的部落格搬運過來。最近遇到乙個很奇怪的問題,在arm linux下發現乙個bug,用windows版驗證也有這個問題,後來查到原因是下標錯了,多加了1,後來修復了這個bug。可是測試人員在驗證新版本時告訴我,原版本沒有這個問題。後來了解到,該測試人員測試的額x8...

關於C語言的陣列賦值和陣列下標越界問題

陣列名就代表著該陣列的首位址,後面的所有元素都可以根據陣列名加上偏移量取到。第乙個小例子 程式設計實現顯示使用者輸入的月份 不考慮閏年 擁有的天數。include define months 12 intmain int month 1 12 dowhile month 1 month 12 處理不...