筆試中數組越界問題
下面這個程序執行后會有什么錯誤或者效果:
#define MAX 255
int main()
{
unsigned char A[MAX],i;
for (i=0;i<=MAX;i++)
A[i]=i;
}
解答:MAX=255,數組A的下標范圍為:0..MAX-1,這是其一,其二 當i循環到255時,循環內執行: A[255]=255;這句本身沒有問題,但是返回for (i=0;i<=MAX;i++)語句時,由于unsigned char的取值范圍在(0..255),i++以后i又為0了..無限循環下去.
注:char類型為一個字節,取值范圍是[-128,127],unsigned char [0 ,255]
拓展閱讀:
語法錯誤不等于不能執行,能執行不等于結果正確....
結論:
越界是肯定的
內存是很大的
舉個例子吧:
int main(...){
int a =0;
int b[3] = 0;
b[3] = 1;
}
//結果有可能使a=1;
//具體結果跟進程中棧排列有關
越界雖然會影響其它內存位置的變量,但只能影響本進程空間的'內存,對其他程序沒有影響,除非你的越界已經延伸到了環境變量的位置
unix/linux下可能的錯誤(其他的不知道):
SIGBUS 總線錯誤
SIGSEGV 段地址錯誤
【筆試中數組越界問題】相關文章:
《公民凱恩》中的視角越界08-19
JavaScript中的索引數組、關聯數組和靜態數組、動態數組的分類講11-10
PHP中如何創建和修改數組11-25
幾個常見的軟件測試面試筆試中的問題12-09
ASP筆試問題集11-27
淺談javascript數組06-19
中軟集團筆試題12-20
關于PHP數組內存耗用太多問題的解決方法11-20
JSON數組用法介紹11-10