c语言 ——栈与数组越界
栈
栈是用来储存普通局部变量的,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据,并且从上而下分配低地址。
如下图:

这就是栈的运行方式,==并且栈想一条长长的线,需要多少拿出多少,剩下的部分继续连着。==那么数组越界是什么呢,与栈有什么关系呢。
数组越界
i数组arr[4];有4个下标:[0]-[3],但i的值如果变成4,那将会是第五个下标,应有4个元素却有了5个元素因此会越界。代码如下
#include<stdio.h>
int main()
{
int i;
int arr[4];
for(i=0;i<=4;i++)
{
arr[i]=0;
}
return 0;
}

这和栈有什么关系呢,栈把内存分配给数组arr,先进后出的原则先从arr[4]分配,分配之后进行数组赋值
如下图:

在循环中4<=4成立数组越界,这个越界指的是当前合法位置的下一个,即arr[4]=0则指向了变量i的地址空间并对i赋值为4,导致了程序的奔溃。
如图:
其中的4产生了越界行为。
本文探讨了C语言中的栈与数组越界问题。栈遵循先进后出原则,数组越界如arr[4]会导致访问非法内存,与栈的分配方式有关。在循环中,数组越界可能会覆盖相邻变量的内存,从而引发程序崩溃。
1074





