1、C#高手,请教一下关于"索引超出了数组界限"?
for (int i=0;i<2;i++) //我是想找出事先赋值好的数组Array中,任俩个 { //值加起来等于100的数组元素.
for(int j=0;j<50;j++)
{
for (int m=0;m<2;i++)
{
for(int n=0;n<50;j++)
{
if(Array[i,j]+Array[m,n+1]==100) //此处运行会出现问题
Console.WriteLine (Array[i,j]+' '+Array[m,n+1]);
}
}
}
}bug修复:n+1,当n=49时,A[m,50]不就越界了么。
改成if((i<>m || j<>n) && Array[i,j]+Array[m,n]==100)就行了2、
code清单:
class Sort { int[] a = new int[10]; public Sort() { int i; Console.WriteLine("Please enter 10 numbers"); for (i = 0; i < a.Length; i++) a[i] = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("The result is:"); Array.Sort(a); for (i = 0; i <a.Length; i++) ; Console.WriteLine(a[i]); } } class Program { static void Main(string[] args) { Sort obj=new Sort(); Console.ReadKey(); } }
问题:运行一直显示索引超出了数组界限;可是应该没超呀,哪里不对啊?
bug修复:第二个for循环后面多了个分号;
相当于一个空循环,下面Console.WriteLine(a[i]);的时候i就等于10了。
索引超出了数组界限诊断分析:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
索引超出了数组界限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.IndexOutOfRangeException: 索引超出了数组界限。
源错误:
生成此未处理异常的源代码只能在调试模式中进行编译时显示。若要启用该功能,请执行以下步骤之一,然后请求 URL:
1. 在生成错误的文件的顶部添加一个“Debug=true”指令。示例:
<%@ Page Language="C#" Debug="true" %>
或者:
2. 将以下节添加到应用程序的配置文件中:
<configuration> <system.web> <compilation debug="true"/> </system.web> </configuration>
请注意,第二种方法将使给定应用程序中的所有文件在调试模式下进行编译。第一种方法只使特定文件在调试模式下进行编译。
重要事项:以调试模式运行应用程序肯定会引起内存/性能系统开销。在部署到产品方案中之前,应该确保应用程序已禁用调试。
堆栈跟踪:
[IndexOutOfRangeException: 索引超出了数组界限。]
System.Collections.ArrayList.get_Item(Int32 index) +99 System.Data.DataTable.GetIndex(Int32[] indexDesc, DataViewRowState recordStates, IFilter rowFilter) +38 System.Data.DataView.UpdateIndex(Boolean force) +108 System.Data.DataView.SetIndex(String newSort, DataViewRowState newRowStates, DataFilter newRowFilter) +83 System.Data.DataView.set_RowFilter(String value) +168 IWMS.Pages.BasePage.ChildIDs(Int32 xabacf43b5a271b09) +653 IWMS.Pages.BasePage.DvTop(Int32 xeaf1b27180c0557b, String x43163d22e8cd5a71, Int32 xd348594d12168e5d, Boolean xd099181c7b9885f7, String xa2a2ec13747e3d18, String xc30a86500170f7ea) +3028 IWMS.Pages.BasePage.x8752ea2d68cc6be9(String xeaf1b27180c0557b, String x43163d22e8cd5a71, String xa02f2dded2a83a70, Int32 x25b63b7def91286b) +388 IWMS.Pages.BasePage.TopList(String xeaf1b27180c0557b, String x43163d22e8cd5a71, String xa02f2dded2a83a70, Int32 x25b63b7def91286b, Int32 xcc5dca50464c8f6f, Boolean x2d65e4b1db1fea0c, Boolean x1df6b754b4a70556, Boolean xbb4270c63b6645c2, Boolean x7116644edac7e20b, Boolean x4ebef5cd7ed06da5, Boolean xb7d29b907dd86710, Boolean xb13dd76e63f56330, Int32 x3d5f009702d4bab0) +6913 IWMS.Pages.BasePage.TopList(Int32 xeaf1b27180c0557b, String x43163d22e8cd5a71, String xa02f2dded2a83a70, Int32 x25b63b7def91286b, Int32 xcc5dca50464c8f6f, Boolean x2d65e4b1db1fea0c, Boolean x1df6b754b4a70556, Boolean xbb4270c63b6645c2, Boolean x7116644edac7e20b, Boolean x4ebef5cd7ed06da5, Boolean xb7d29b907dd86710, Boolean xb13dd76e63f56330, Int32 x3d5f009702d4bab0) +92 IWMS.Pages.BasePage.TopList(String xa02f2dded2a83a70, Int32 x25b63b7def91286b, Int32 xcc5dca50464c8f6f, Boolean x2d65e4b1db1fea0c, Boolean x1df6b754b4a70556, Boolean xbb4270c63b6645c2, Boolean x7116644edac7e20b, Boolean x4ebef5cd7ed06da5) +54 ASP.index1_aspx.__Render__control1(HtmlTextWriter __output, Control parameterContainer) +1227 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +27 System.Web.UI.Control.Render(HtmlTextWriter writer) +7 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243 System.Web.UI.Page.ProcessRequestMain() +1929
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573
其它索引超出了数组界限概括:
无论是什么语言,偶尔都会遇到索引超出了数组界限这样的错误提示,也就是数组越界(所用数组索引超出了数组实际索引)。例如,一个数组只有5个元素,数组索引(下标)又是从0开始的,如果定义的数组为 a,这样取取值 a[5],则会报数组越界错误,因为最后一个元素的索引是4,取最后一个元素应该这样 a[4]。
当然,在实际开发过程中很少会犯这么低级的错误,通常都是程序运行产生的动态数组,因某些情况一时没有考虑到而致数组越界。接着就举例一些常见的索引超出了数组界限示例,为满足不同的需要,将举 javascript、C# 等语言的实例。
一、javascript 索引超出了数组界限示例
1、示例一:数组索引误从1开始,代码如下:
var arr = [1, 2, 3, 4, 5, 6];
错误:
for(var i = 1; i <= arr.length; i++){
var tmp = arr[i];//当 i = arr.length,数组越界
}正确:
for(var i = 0; i < arr.length; i++){
var tmp = arr[i];
}2、未判断数组长度,随意取值导致数组越界
假如要获取网页的所有 div 标签,事先没判断有多少个 div,就直接用下标取值,代码如下:
var arr = document.getElementsByTagName("div");
var temp = arr[1];如果网页中没有 div 或者只有一个 div,则 arr[1] 会发生数组越界错误,正确代码应该加一句判断:
if(arr.length > 1){
var temp = arr[1];
}二、C# 索引超出了数组界限示例
假如要取一个文件夹中的所有文本文件,如果用数组长度取最后一个元素,则会产生数组越界错误,代码如下:
///
/// C#获取一个文件夹中所有文本文件 ///
///文件夹路径
private void GetTxtFiles(string path)
{
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] arrFi = di.GetFiles("*.txt");
//错误
string temp = arrFi[arrFi.Length].Name;//用数组长度取最后一个元素,则产生数组越界
//正确
string temp = arrFi[arrFi.Length - 1].Name;
}调用:
GetTxtFiles("G:\xq\test");索引超出了数组界限(Microsoft.SqlServer.Smo)
SSMS连接远程SQL Server服务器是很方便的。
昨天我用SQL Server 2008 SSMS连接SQL Server 2012竟然报错,如下图:

在网上搜了,参考这个参考那个,太啰嗦了,确实是软件固有的问题,微软肯定会发补丁解决的!
于是看了我的SQL Server 2008的版本,在SSMS界面,帮助--关于。没有类似下面的Windows版本那样明显:

而是10.0.xxxx.x,我只知道10.0的SQL Server 2008,如果前面是10.5就是SQL Server 2008 R2,如果11.0的话应该就是SQL Server 2012.但具体是SP几就不知道了,然后上网查才知道我的就是SQL Server 2008,没Service Pack。那想必是我得版本太低了,网上介绍的就是某个特定的补丁吧。我就索性把SP1,SP2全打上了;结果打完了SP1问题依旧,打完了SP2还是相同问题,晕了!一搜,还有SP3,于是又打SP3,打完了就OK了。SSMS的版本就变成下面的10.0.5512.0。

开始想直接跳过SP1直接打SP2的,想测试SP2的补丁包是否包含了SP1。结果SP1后下载先完成,那就按步骤来吧。
查看具体的SQL Server的版本,可以在SSMS的Master数据库中执行:select @@Version

总结:以上是关于索引超出了数组界限的相关知识点收集总结,希望能给你带来帮助。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

支持你加分