C语言数组越界导致死循环,如何巧妙避免重蹈覆辙?

2026-04-12 08:501阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计501个文字,预计阅读时间需要3分钟。

C语言数组越界导致死循环,如何巧妙避免重蹈覆辙?

目录

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

C语言数组越界导致死循环,如何巧妙避免重蹈覆辙?

五、总结

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

五、总结

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

五、总结

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

五、总结

目录
  • 一、引入
  • 二、代码缺陷
  • 三、为什么会死循环?
  • 四、补充说明
  • 五、总结

一、引入

下面的程序在VS编译器会出现什么问题?运行结果是什么?为什么?

#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\n"); } return 0; }

运行结果:

如下图:代码死循环

二、代码缺陷

上述代码有两个问题:

数组访问越界死循环

三、为什么会死循环?

1、i和arr都是局部变量,在内存中局部变量都是存储在栈区的。

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

3、栈区的内存规定:先使用高地址处的空间,再使用低地址处的空间。

根据上述代码可知,程序会先在栈区中高地址处为变量i开辟空间,再在栈区中由高到低依次为数组arr开辟空间

如下图

本文共计501个文字,预计阅读时间需要3分钟。

C语言数组越界导致死循环,如何巧妙避免重蹈覆辙?

目录

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

C语言数组越界导致死循环,如何巧妙避免重蹈覆辙?

五、总结

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

五、总结

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

五、总结

一、引言

二、代码缺陷

三、为什么会出现死循环?

四、补充说明

五、总结

目录
  • 一、引入
  • 二、代码缺陷
  • 三、为什么会死循环?
  • 四、补充说明
  • 五、总结

一、引入

下面的程序在VS编译器会出现什么问题?运行结果是什么?为什么?

#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\n"); } return 0; }

运行结果:

如下图:代码死循环

二、代码缺陷

上述代码有两个问题:

数组访问越界死循环

三、为什么会死循环?

1、i和arr都是局部变量,在内存中局部变量都是存储在栈区的。

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

3、栈区的内存规定:先使用高地址处的空间,再使用低地址处的空间。

根据上述代码可知,程序会先在栈区中高地址处为变量i开辟空间,再在栈区中由高到低依次为数组arr开辟空间

如下图