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