关于C语言数组越界访问导致死循环的分析

本文探讨了一段C语言代码由于数组越界访问导致的死循环问题。在循环过程中,越界修改了变量i的值,使得循环条件始终满足,形成无限循环。通过调试发现,变量i与数组arr的某个元素存储在同一地址,改变变量定义顺序可避免循环。此问题在Debug模式下出现,Release模式则正常运行,揭示了不同编译模式下内存管理的差异。
摘要由CSDN通过智能技术生成

        最近我在学习C语言时碰到一个很有趣的问题,在翻阅了一些大佬的文章后对该问题成因有了一些大概的了解。我觉得这个问题很有参考意义,于是便编写了这篇文字,希望能帮到其他正在学习C语言的同学们。

        具体情况如下:

        代码:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main()
{
	int i = 0;
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hello,c\n");
	}
	return 0;
}

        运行结果:

4dd584b259fc4b199b873d5cb18e5434.png

        执行这段代码后,程序将陷入死循环,不断打印  “hello,c”  。

        先说结论,这个问题是因为 越界访问数值,访问到并修改了 i 值而导致的。

 

        以下是详解:

        我们通过VS调试模式的监控器可以看到,i 的地址与arr[12]的地址是相同的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值