2014-09-19 139 views
-4

我写了这个代码,但在该行得到了内存不足的异常,如果我传递出的范围值为46542.内存不足异常?

long[,] array = new long[range, range]; 

如何解决这个问题?

int noOfTestCases = Convert.ToInt32(Console.ReadLine()); 
if(noOfTestCases>=1 && noOfTestCases<=100) 
{ 
    for(int i=0; i<noOfTestCases; i++) 
    { 
     Console.WriteLine("Enter the Range"); 
     long range = Convert.ToInt64(Console.ReadLine()); 
     long[,] array = new long[range, range]; 
    } 
} 
+4

'range'的值是什么? – 2014-09-19 12:57:04

+1

为什么你想创建一个2,166,157,764元素的数组呢? – CodeCaster 2014-09-19 12:58:58

+0

超过46542或可能少于一些数值到46542. – amit325 2014-09-19 12:59:41

回答

2

可以有作为阵列中一个索引的最大大小为System.Int32.MaxValue,比一些Int64号码小。因此你会得到这个例外。

3

如何解决这个问题?

选择小于46,341的范围。数组中的最大数量元素Int32.MaxValue或2,147,483,647。

由于您正在创建NxN阵列,因此“正方形”一侧的最大尺寸为Math.Sqrt(Int32.MaxValue)46340.950001052

+0

+ 1的解释与广场。 – Christos 2014-09-19 13:03:29