2014-09-19 2 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'? –

+1

Почему вы хотите создать массив из 2,166,157,764 элементов? – CodeCaster

+0

более 46542 или может быть меньше, чем некоторые значения для 46542. – amit325

ответ

2

Максимальный размер вы можете иметь в качестве индексатора в массиве является System.Int32.MaxValue, который меньше, чем некоторые Int64 чисел. Следовательно, вы получаете это исключение.

3

Как это решить?

Выберите диапазон, который меньше 46,341. Наибольшее количество элементов в массиве составляет Int32.MaxValue, или 2,147,483,647.

Поскольку вы создаете массив NxN, наибольший размер одной из сторон «квадрата» равен Math.Sqrt(Int32.MaxValue) или 46340.950001052.

+0

+1 для объяснения с квадратом. – Christos

Смежные вопросы