2014-09-19 206 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