C语言数组中访问超过边界问题案例剖析

一.代码描述以及错误描述

#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;
}

代码描述:创建一个数组,里面存储类10个数,然后循环遍历将数组中的每个元素赋值为零,每次赋值一个元素,就打印一个hello。

错误描述:以下为运行结果(陷入死循环,一直打印输出hello),和错误提示:变量 “ ” 周围的堆栈已损坏。

在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/6b230e7617f24760bf23eb57c6e7a81f.png

二.解决方法和原因剖析

解决方法: !!!规范自己写循环的条件和表达式,做到不在数组当中不越界。!!!

原因:1.在栈当中,存储局部变量,存储习惯为从高到低;而数组当中,存储习惯为随着下标的增大,从低到高进行存储。2.在不同的编译环境中局部变量与数组的空间位置间隔举例不同。

什么叫做栈,静态区和堆

C语言拥有三种不同的内存池。
在这里插入图片描述在这里插入图片描述

调试观看结果

 我们可以看到,即使数组中只有是个数子但是,再执行循环的时候仍然越过了数组的界限,进入了死循环。

为什么在越过界限的时候,编译器不能报出错误呢?

 因为这个时候编译器在进入了死循环,所以不能及时报出错误。

在这里插入图片描述

三总结

编程的学习,不仅仅要学会写出自己想要的结果,还要学会调试代码,在空间和时间上达到最优的结果。一般在学习代码的过程中会遇见三种错误,编译错误,链接错误,运行错误。当遇见错误时,不要慌先进行分类,在慢慢解决,我们遇见的错误,不要想着靠别人解决,不然我们的技术不会有任何的增长。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值