By无邪 发表于 2019-11-5 10:43

C语言中一个神奇的代码

反正数组是越界了,但是看代码显示应该是到11的时候就停了,但是因为数组的问题,不知道为啥又循环

dazhuangzhuang 发表于 2019-11-5 10:47

数组a之后是i,i的位置正好在a的位置,当a=0以后,相当于i置0

411161555 发表于 2019-11-5 10:50

本帖最后由 411161555 于 2019-11-5 15:18 编辑

问了朋友越界。

jiujiuzhiyue 发表于 2019-11-5 10:51

为什么啊

lgh520 发表于 2019-11-5 10:53


就是越界了,如果再越两个个就到了函数返回地址的地方,也就是ebp+4的地方,不知道是不是这样,楼主自测。

mywanghh 发表于 2019-11-5 10:53

int a 是 a ~ a,紧接着存放 int i;

dazhuangzhuang 发表于 2019-11-5 10:57

本帖最后由 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

xmlulu 发表于 2019-11-5 10:59

411161555 发表于 2019-11-5 10:50
那也是a=0跟i 有什么关系?

a 在内存中的位置,就是i的位置,所以 i 的值又被赋值成0了

dazhuangzhuang 发表于 2019-11-5 11:04

另外,反汇编后,看数组a和i的关系,就更好理解了

yc19951005 发表于 2019-11-5 11:21

楼上好多大神啊
页: [1] 2 3
查看完整版本: C语言中一个神奇的代码