笔试中数组越界问题

下面这个程序执行后会有什么错误或者效果:

笔试中数组越界问题

#define MAX 255

int main()

{

unsigned char A[MAX],i;

for (i=0;i<=MAX;i++)

A[i]=i;

}

解答:MAX=255,数组A的下标范围为:-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 段地址错误