c语言 ——栈与数组越界

本文探讨了C语言中的栈与数组越界问题。栈遵循先进后出原则,数组越界如arr[4]会导致访问非法内存,与栈的分配方式有关。在循环中,数组越界可能会覆盖相邻变量的内存,从而引发程序崩溃。

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产生了越界行为。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值