数组越界可能造成的死循环风险

//数组越界造成的死循环风险
int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12; i++)  //当小于等于11时会报错,而小于等于12的时候不会,
	{	                      //原因是小于等于12的时候死循环,导致没有机会报错,因为报错是在程序结束后发生的
		printf("沉迷学习,无法自拔\n");
		arr[i] = 0;
	}
	return 0;
}

以上程序在debug版本下运行时会出现死循环的情况。原因如下: alt 该程序在运行时,由于i和arr都属于局部变量,故会在栈区创建,由于i在前,arr在后,且系统栈区是由高到低的,故变量i创建在高地址,数组arr创建在低地址,当数组访问越界且i=12时,arr[12]=0,arr[12]与i在同一空间,故此时i==0,造成死循环。

注意:

(1)在不同的编译器下,数组与变量间的空余空间不同,vs2019下是2个空间。

(2)在release版本下,不会造成死循环,原因是编译器将代码优化时,使变量i创建在数组之后。

全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务