目录
- 一、引入
- 二、代码缺陷
- 三、为什么会死循环?
- 四、补充说明
- 五、总结
一、引入
下面的程序在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开辟空间
如下图
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)