当前位置: 首页 > news >正文

IndexOutOf下标越界几种解决方案

目录

python下标越界list index out of range

Java下标越界java.lang.ArrayIndexOutOfBoundsException

Java String index out of range

C语言数组下标越界out terminated

C++数组下标越界不报错

C#数组下标越界System.IndexOutOfRangeException

PHP数组下标越界Notice: Undefined offset:1

总结


python下标越界list index out of range

python里说的是list越界,其实也就是列表,格式是【arr=["1","2","3"]】这样的,如果输出的时候超出下标数量就会报这个异常。来我们截图看一下。

还是很明显的。

Java下标越界java.lang.ArrayIndexOutOfBoundsException

无论是数组还是集合列表在下标越界的时候都会报这个异常,只是后续提示的内容有所区别,我们来看一下:

String [] arr=new String[10];

System.out.println(arr[11]);

ArrayList<Integer> arr=new ArrayList<Integer>(); 

System.out.println(arr.get(11));

Java String index out of range

Java字符串超出索引的范围,这里的out of是【越出…之外】的意思,range就是【范围】,超出范围肯定会报错的。

C语言数组下标越界out terminated

#include <stdio.h>

int main() {
    int a[10]={0};
    a[10] = 0;
    return 0;
}

C语言的下标越界报错有些不同。

*** stack smashing detected ***: ./970872.out terminated

可以看到包的错不是index out of,是out terminated,也就是超出终止范围。

画一个小爱心,祝大家都能顺利解决各种bug。

#include <stdio.h>int main() {printf("\n\n绘制一个心形图案:");for (float y = 1.5f; y > -1.5f; y -= 0.1f) {for (float x = -1.5f; x < 1.5f; x += 0.05f) {float a = x * x + y * y - 1;putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' ');}putchar('\n');}return 0;
}

C++数组下标越界不报错

C++比较特殊,下标越界的时候啥也不报,这个挺难受的。

#include <stdio.h>
#include <iostream>
#include <math.h>
int main() {
    using namespace std;

    char a[]={'1','2'};
    cout << a[5]<<endl;


    return 0;
}

很明显的上列代码是有越界的,执行的时候啥都没有,不报错。

linux平台或者g++编译器对下标越界问题有自己的处理,导致程序不挂。而Visual c++编译器对下标越界不进行处理,程序挂掉。

来个好看一些的心来平绪一下心情吧:

#include <stdio.h>
#include <iostream>
#include <math.h>float f(float x, float y, float z) {float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}float h(float x, float z) {for (float y = 1.0f; y >= 0.0f; y -= 0.001f)if (f(x, y, z) <= 0.0f) {return y;}return 0.0f;
}int main() {using namespace std;for (float z = 1.5f; z > -1.5f; z -= 0.05f) {for (float x = -1.5f; x < 1.5f; x += 0.025f) {float v = f(x, 0.0f, z);if (v <= 0.0f) {float y0 = h(x, z);float ny = 0.01f;float nx = h(x + ny, z) - y0;float nz = h(x, z + ny) - y0;float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);float d = (nx + ny - nz) * nd * 0.5f + 0.5f;putchar(".:-=+*#%@"[(int)(d * 5.0f)]);} else {putchar(' ');}}putchar('\n');}return 0;
}

C#数组下标越界System.IndexOutOfRangeException

C#的越界和Java的差不多,都会提示出来,直接说明是怎么回事。有中文提示还是挺方便的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace demo20221008
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[5];
            Console.WriteLine(arr[6]);
        }
    }
}

PHP数组下标越界Notice: Undefined offset:1

Notice: Undefined offset: 22 in D:\phpStudy\PHPTutorial\WWW\demo.php on line 4

这是PHP的数组下标越界,一看就明白,未定义的开端,也就是没有这个开始。那肯定就是越界了。

总结

其它小众的语言我就不举例了,我们挨个看了看常用的语言数组下标越界的情况,从而能在以后的异常中快速定位问题所在快速解决bug。

异常是很常见的,一个不会解决bug的程序员是很难找到成就感的,当你突破一个个bug后那种自豪感还是很棒的。

http://www.xdnf.cn/news/805951.html

相关文章:

  • 皮肤html代码大全,清新QQ空间免费皮肤代码大全(可用)
  • 镜头光晕 - Affinity Photo 教程
  • 流程图控件开源_软件自动化测试基本流程(附流程图)
  • VirtualBox上建立开发板、虚拟机和主机的连接
  • Element-UI:el-table样式修改
  • 宏基4750网卡驱动linux,宏碁4750g无线网卡驱动下载
  • SQL Server 2000企业版安装教程
  • WebEasyMail发布和邮箱申请
  • 网络摄像机—图像压缩方式—JPEG、MJPEG
  • WAP网页设计入门
  • USB大容量存储设备无法启动该怎么办?
  • E6全部刷机包
  • 上网本安装MeeGo 1.0初体验
  • VS各个版本之间2005、08、10、12...转换
  • 2025LitCTF re wp复现
  • Android 4.0 x86安装教程 附带联网参数详细设置
  • 黑客教程之灰鸽子VIP2006终极免杀技术(转)
  • 惊!QQ新漏洞 腾讯3亿用户遭受威胁
  • 软件破解实例教程
  • 【Typst】1.Typst概述
  • 如何通过Python暴力破解网站登陆密码
  • asp.net开源资料——国内.NET论坛源代码
  • 等保分保关保密评|四道防线守护网络信息安全
  • 如何获取维普免费账号--应对大家工作后在校外下载维普万方等全文
  • 澳优血统受质疑奶粉被下架,实为贴牌生产
  • 联想y430完全拆机图解_联想Y430P笔记本拆机加内存和SSD图文教程
  • flash as3.0的简单使用
  • 河南网通PPPOE真实账号查找及路由共享上网方法
  • TestDirector 8.0下载地址以及安装教程
  • HTC G14(G18)刷MIUI详细刷机教程