数组访问越界_数组越界会导致什么问题

数组访问越界_数组越界会导致什么问题什么是数组访问越界?所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是C语言程序中最常见的错误之一。在C语言中,数组必须是静态的。换而言之,数组的大小必须在程序运行前就确定下来。由于C语言并不具有类似Java等语言中现有的静态分析工具的功能,可以对程序中数组下标取值范围进行严格检查,一旦发现数组上溢或下溢,都会因抛出异常而终止程序。也就是说,C语言并不检验数组边界,数组的两端都有可能越界,从而使其他变量的数据甚

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

什么是数组访问越界?

所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一。

在 C 语言中,数组必须是静态的。换而言之,数组的大小必须在程序运行前就确定下来。由于 C 语言并不具有类似 Java 等语言中现有的静态分析工具的功能,可以对程序中数组下标取值范围进行严格检查,一旦发现数组上溢或下溢,都会因抛出异常而终止程序。也就是说,C 语言并不检验数组边界,数组的两端都有可能越界,从而使其他变量的数据甚至程序代码被破坏。

因此,数组下标的取值范围只能预先推断一个值来确定数组的维数,而检验数组的边界是程序员的职责。

一般情况下,数组的越界错误主要包括两种:数组下标取值越界与指向数组的指针的指向范围越界。

如何避免?

由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题,解决问题方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。

举例

#include<stdio.h>

void PutArray(int *p, int length)
{ 
   
   // 在此判断入口参数p和length的有效性

   ……

   for(int i=0;i<length;i++)
   printf("%d/t",p[i]);
}

int main()

{ 
   
  int a[3]={ 
   2,4,6} ;
  printf("数组a[3]调用函数PutArray的结果为:/n");
  PutArray(a, sizeof(a)/sizeof(a[0]));
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186862.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • STL algorithm算法lower_bound和upper_bound(31)

    STL algorithm算法lower_bound和upper_bound(31)

    2021年12月8日
    44
  • mysql的索引有哪几种_MySQL索引数据结构

    mysql的索引有哪几种_MySQL索引数据结构摘要腾兴网为您分享:mysql索引类型有哪些,易信,微商助手,刷机精灵,数字涂色等软件知识,以及家校即时通,内部通讯录,叫叫识字大冒险,天天酷跑,手机电视高清直播,短信验证软件,诛仙表情包,一手女装,iis7,instagram视频,搭建卡盟主站,umbrella,qq音乐qmc0格式,图片降噪,钢筋锈蚀检测仪等软件it资讯,欢迎关注腾兴网。介绍各种类型的mysql索引。1、普通索引普通索引…

    2022年8月12日
    3
  • Python学习笔记三(开发进阶)

    Python学习笔记三(开发进阶)本文主要针对python的package、面向对象编程等进行详述。

    2022年6月17日
    27
  • 35道SpringBoot面试题及答案,面试常被问到「建议收藏」

    35道SpringBoot面试题及答案,面试常被问到「建议收藏」作者:Arain|来源于:程序员面试SpringBoot是微服务中最好的Java框架.我们建议你能够成为一名SpringBoot的专家。本文精选了三十五个常见的SpringBoot知识点,祝你一臂之力!问题一SpringBoot、SpringMVC和Spring有什么区别?1、SpringSpring最重要的特征是依赖注入。所有SpringM…

    2022年6月7日
    30
  • debian详细安装教程_debian 安装ssh

    debian详细安装教程_debian 安装ssh1.安装 按照这篇图文并茂的文章安装http://www.itwhy.org/2011/07-27/694.html2.安装ssh安装好后登录并切换到root用户,使用命令apt-getinstallssh一串协议后输入大写Y同意协议,ssh会自动安装并启动

    2022年10月19日
    1
  • linux基本操作_shell入门教程

    linux基本操作_shell入门教程linux环境虚拟机管理使用VMwareWorkstationlunix系统使用redhat7.4(镜像.ios) linux常用命令::Id用户名查看用户信息查询端口号占用netstat-tunlp|grep端口号pwd查看当前文件夹目录cat查看文件,不可修改cat文件|more以分页模式查看文件,(空格键下一页,回车下移一行,q退…

    2022年10月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号