笔试中数组越界问题
下面这个程序执行后会有什么错误或者效果:
#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