对代码的分析

这篇博客探讨了C语言中数组越界访问导致的栈区混乱现象。在调试模式(debug)下,由于数组访问越界,可能会修改到i变量的内存空间,形成死循环。而在发布模式(release)下,经过优化的代码可能将i放置在较低的内存地址,避免了这种越界访问,因此不会出现死循环。理解这种行为对于调试和优化代码至关重要。
摘要由CSDN通过智能技术生成
#include<stdio.h>
int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	return 0;
}

i 和 arr 是局部的变量

局部变量是放在栈区上的

栈区的使用习惯是先使用高地址,再使用低地址。

数组随着下标的增长,地址是由低到高变化的。

 有图可以看出,随着数组访问,当越界后就会访问到 i 的内存空间。就会出现死循环。

这是在debug情况下才会出现的情况,当使用 release 进行优化后就不会出现死循环了,因为把 i 的地址放到了相对数组的更低的内存位置上,就不会出现越界访问访问到 i 的内存空间上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值