我们首先来看一段代码,为什么会造成死循环打印“hello”呢???
我们看一下下图的监视窗口,我们可以发现&arr[12]和&i竟然是一样的!!!
也就是说循环到arr[12]=0也就意味着把i也变成0了,循环也就重新开始并且无法停止下来。
为什么会造成arr[i]==&i呢???我们来了解一下内存中栈区的使用习惯就知道了:
- 栈区创建新的内容:先使用高地址的空间,再使用低地址的空间。
- 数组在内存中是连续存放的,随着数组的增长,地址由低到高变换。
- 当超出数组大小越界访问,很可能导致出现非法访问的情况,例如这段代码的案例,i的地址比数组中元素的地址要高,非法访问到i也就导致了最后的死循环。
这段案例是通过vs编译器,在数组后会空出两个int,不同编译器根据环境决定!