数组越界的代码如下:
int main()
{
int i;//栈
int arr[10];
for(i=0;i<=10;i++)
{
arr[i] = 0;
printf("%d\n",i);
}
}
此时整个数组为一个栈,根据先进后出的原则,先进入的元素进入栈底,所以i先入栈,在栈底的位置。之后为arr数组分配十个内存单元,由于低地址在栈顶,高地址在栈底,所以arr[0]在栈顶,之后依次存放各个数组中的数值。由于语句中发生了数组越界(arr[]数组中只有10个内存单元,供arr[0]~arr[9]使用,但在语句中却有arr[10],因此发生了数组越界),arr[10]的数值0将赋值给i中的数值,从而使整个过程进入死循环。如下图所示:

在实际过程中,发生数组越界是非常可怕的。因此,要在一定程度上避免发生数组越界。一般常用的方法为在定义数组长度时,多分配两个内存单元来避免数组越界。
5762

被折叠的 条评论
为什么被折叠?



