笔试中数组越界问题

时间:2020-11-21 18:19:27 笔试题目 我要投稿

笔试中数组越界问题

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

笔试中数组越界问题

  #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