GNUfan 发表于 2021-2-22 14:05:02

为什么这段代码会无限循环?


有人说这段代码会无限循环,我只看出了数组a的访问越界了,但为什么会变成死循环?

昨非 发表于 2021-2-22 14:12:01

索引越界引发异常中断了
并不是死循环

xieglt 发表于 2021-2-22 14:33:48

只能说有可能无限循环,也有可能不死循环。
高级语言在栈上面为临时变量分配空间。
inta,i;
分配了1个10元素的整形数组,和一个整形变量。
如果是32位系统,将在栈上分配 11*4= 44 字节的空间。
如果用 esp 来代表栈指针,那么这时 esp = esp - 44 ,这就是临时变量的空间分配。
这时 i 有可能分配在低地址端,也有可能分配在高地址段。
如果分配在高地址段,那么 a 的地址有可能就是i 的地址。
a = 0这句操作执行到 i=10是就是 a = 0,也就相当于把 i 赋值为 0。
这时 i 又从0开始计数,导致了无限循环。
如果 i 分配在低地址端,那么 a[-1] 的地址才是 i 的地址,那么就不会造成无限循环。
页: [1]
查看完整版本: 为什么这段代码会无限循环?