c#System.OverflowException

时间:2015-12-31 15:30:13

标签: c# math long-integer

所以这是我的代码:

static void Main(string[] args)
{
    Console.WriteLine("How many numbers are you going to enter?");

    long num = long.Parse(Console.ReadLine());

    long[] nums = new long[num];
}

当我为" num"输入10000000000时我得到了

  

" System.OverflowException算术运算导致了   。溢出"

我该怎么做才能解决它?

2 个答案:

答案 0 :(得分:9)

您的代码溢出,因为C#中数组的最大大小为Int32.MaxValue,等于2147483647.您可以在source code中看到相应的提示,并在{{{ 3}}:

  

默认情况下,Array的最大大小为2千兆字节(GB)。在一个   在64位环境中,您可以通过设置来避免大小限制   在运行时,配置元素的启用属性(在.NET 4.5中引入的<gcAllowVeryLargeObjects>)为true   环境。但是,阵列仍将限制为总共4个   十亿个元素,并且在任何给定的最大索引为0X7FEFFFFF(2146435071)   维度(0X7FFFFFC7(2147483591)用于字节数组和单字节数组   结构)。

答案 1 :(得分:4)

好的,你正在尝试分配很多内存,因为调用long数组构造函数实际上已经释放了你请求的内存。 long是64位,所以是8个字节。 8字节* 10000000000 = 80 GB内存。那太多了。

假设您有足够的内存,C#中数组的最大长度为int.MaxValue,即2,147,483,647(使用long为16GB)。