索引超出数组界限

yuyu46569 2010-09-27 10:37:41
int startnum = 0;
int endnum =0;
int middepth =3059;
double[] mydepth = {0.0};

for(int t1 = startnum; t1 <= endnum; t1++)
{
if(mydepth[t1} <= middepth && mydepth[t1 +1} >= middepth) //mydepth[t1+1}索引超出数组界限
{
////////////////////
////////////////////
}
}
else
{
if(mydepth[t1} <= middepth && mydepth[t1 +1} >= middepth)//这个地方倒不报错
{
////////////////////
////////////////////
}
}
...全文
94 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyu46569 2010-09-27
  • 打赏
  • 举报
回复
哦,我明白了 谢谢各位
这是以前公司走了的人写的,老板说以前他们用过,是可以正常运行的 所以我就贴上来问问
Lemon2050 2010-09-27
  • 打赏
  • 举报
回复
其实并非不报错,只是因为执行了if后,发现错误后,就不再去ELSE中编译的,编译并非一次行发现所有错误,如果发现了block的重大的错误,将忽略之后的错误。你可以把代码修改成以下这样,再进行调试,那你就会发现问题了:
int startnum = 0;
int endnum =0;
int middepth =3059;
double[] mydepth = {0.0};

for(int t1 = startnum; t1 <= endnum; t1++)
{
if(1==2)
{
////////////////////
////////////////////
}
}
else
{
if(mydepth[t1} <= middepth && mydepth[t1 +1} >= middepth)//这个地方倒不报错
{
////////////////////
////////////////////
}
}
Olive_Guo 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 yuyu46569 的回复:]

double[] mydepth = {0.0}; 这里的mydepth 长度只有1

mydepth[t1 +1} 这里 t1=0的时候,mydepth[1]就溢出啦。。。
[/Quote]

明白?
terry 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 yuyu46569 的回复:]
if(mydepth[t1} <= middepth && mydepth[t1 +1} >= middepth) //mydepth[t1+1}索引超出数组界限
[/Quote]

当t1 = endnum 时,t1 + 1 > endnum,必然出错。

[Quote=引用楼主 yuyu46569 的回复:]
if(mydepth[t1} <= middepth && mydepth[t1 +1} >= middepth)//这个地方倒不报错
[/Quote]

当t1 = endnum 时,上面一个if语句都没执行成功,else里面的语句必然没执行到。
bloodish 2010-09-27
  • 打赏
  • 举报
回复
你这个mydepth一维数组,就放了一个double,数组长度是1,
按下标访问Index>0就肯定报数组越界异常.
这种问题,自己想想就该明白.
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在C#开发中,“索引超出数组界限”是常遇的错误,通常源于访问数组元素时,所用索引超出数组合法范围。数组索引从0开始,一个包含n个元素的数组,其合法索引范围为0到n-1。若访问索引为n或更大元素,或负数索引,系统会抛出System.IndexOutOfRangeException异常。在“学生管理系统”项目里,该问题可能有以下原因:一是循环条件出错,像for或foreach循环终止条件设置过大,导致遍历数组或集合时越界。二是动态索引计算有误,运行时计算索引时,因逻辑错误使索引超出范围。三是数组未初始化,使用前未分配足够空间,尝试访问时会出错。四是存在null引用,若数组对象本身是null,访问时会抛异常,需确保使用前已正确实例化。五是多线程环境下,不同线程同时修改数组索引,可能使某线程在错误状态下访问数组,触发异常。六是下标硬编码错误,如数组长度9,却误写成10。解决方法有:一是审查代码,重点检查数组访问相关代码,尤其是循环和条件语句。二是借助Visual Studio等IDE调试工具,设断点观察变量值,定位异常行。三是添加异常处理代码,如try-catch块,捕获处理异常,获取详细错误信息。四是记录异常上下文信息,便于定位问题。五是编写单元测试,验证数组操作正确性,确保各种情况下都不越界。初学者要重视这些常见错误,理解并避免它们。在“学生管理系统”中,处理学生数据数组或列表时,要确保索引合法,增加、删除或查找学生信息时逻辑正确。若有代码,针对性分析更易找到问题。

111,111

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧