C语言中一个神奇的代码
反正数组是越界了,但是看代码显示应该是到11的时候就停了,但是因为数组的问题,不知道为啥又循环数组a之后是i,i的位置正好在a的位置,当a=0以后,相当于i置0 本帖最后由 411161555 于 2019-11-5 15:18 编辑
问了朋友越界。 为什么啊
就是越界了,如果再越两个个就到了函数返回地址的地方,也就是ebp+4的地方,不知道是不是这样,楼主自测。 int a 是 a ~ a,紧接着存放 int i; 本帖最后由 dazhuangzhuang 于 2019-11-5 10:58 编辑
411161555 发表于 2019-11-5 10:50
那也是a=0跟i 有什么关系?
自动数组由C的编译器分配内存时,给a数组数组首先分配了10个整数长度的内存空间,紧随其后又分配了1个整数长度的内存给i,由于C语言不进行数组越界检查,导致编译通过,运行时,当i=10的时候,a对应的内存地址在首地址a之后第10个整数长度处的地址,正好是编译器分配的变量i所在的内存地址。正确的数组范围应该是从0到9 411161555 发表于 2019-11-5 10:50
那也是a=0跟i 有什么关系?
a 在内存中的位置,就是i的位置,所以 i 的值又被赋值成0了 另外,反汇编后,看数组a和i的关系,就更好理解了 楼上好多大神啊