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

数组访问越界_数组越界会导致什么问题什么是数组访问越界?所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm for mac安装

    pycharm for mac安装http www xue51 com mac 5604 html 转载于 https www cnblogs com LeesinDong p 10835539 html

    2025年6月7日
    2
  • c语言xml解析器libxm2

    c语言xml解析器libxm2写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言;2)LIBXML2库的Tutorial写得不太好,尤其是编码转换的部分,不适用于中文编码的转换;3)网上的大多数关于Libxml2的介绍仅仅是翻译了自带的资料,没有详细介绍如何在windows平台下进行编程,更很少提到如

    2022年7月12日
    54
  • allocatememory(an out of memory)

    仅作为记录,大佬请跳过。仅需减小batchsize展示:即可运行。注博主的这个程序减小batchsize就行了,可能不同的博友们的程序不一样,也有的大佬博主使用不计算梯度或释放内存的方式不计算梯度——传送门withtorch.no_grad()释放内存——传送门ifhasattr(torch.cuda,’empty_cache’): torch.cuda.empty_cache()…

    2022年4月10日
    51
  • 域名的url转发功能是什么_url和域名有什么区别

    域名的url转发功能是什么_url和域名有什么区别在网上找了很久,感觉还是米发快捷点,适用于域名注册下来但是个人网站还没完成暂时转发至博客的,或者想给博客弄个个性点的域名的工具:域名,米发帐号  原理:域名商解析到第三方平台服务器,第三方平台帮你转发到你的地址1. 在米发平台上添加域名2. 在米发平台上添加转发操作,   显性URL转发:只是跳转,网站显示的还是你跳转后的地址,不是你的域名隐性URL转发:网站显示的是你的域名,内容是你要跳转的…

    2022年10月19日
    3
  • Python3.7 环境下安装wxPython教程

    Python3.7 环境下安装wxPython教程python3.7环境下安装wxPython教程我的环境安装步骤运行代码和结果我的环境我的安装环境:系统:Windows10专业版;Python版本:Python3.7;wxpython版本::wxPython4.0.6;安装步骤下载wxpython安装包确定你的Python版本,比如我这里是Python3.7,到官网https://pypi.org/proj…

    2022年5月11日
    41
  • asp.net mvc 下拉框级联

    asp.net mvc 下拉框级联给自己需要级联的控制器添加要级联的下拉框获取#region//获取宿舍楼[HttpPost]publicActionResultDrom(stringid){objectobj=getDrom(id);returnJson(obj);}//获取宿舍楼publicList<SelectList.

    2022年7月22日
    12

发表回复

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

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