c# System.OverflowException
本文关键字:OverflowException System | 更新日期: 2023-09-27 18:28:39
所以这是我的代码:
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算术运算导致溢流"
我该怎么修?
您的代码溢出,因为C#中数组的最大大小是Int32.MaxValue
,等于2147483647。你可以在源代码中看到这方面的提示,文档中也有明确的说明:
默认情况下,阵列的最大大小为2 GB。在64位环境中,您可以通过设置在运行时将配置元素(.NET 4.5中引入的
<gcAllowVeryLargeObjects>
)的enabled属性设置为true环境然而,该阵列仍将被限制为总共4个十亿个元素,并且在任何给定中的最大索引为0X7FEFFFFF(2146435071)字节数组和单字节数组的维度(0X7FFFFFC7(2147483591)结构)。
好吧,您正试图分配大量内存,因为调用长数组构造函数实际上已经释放了您请求的内存。long
是64位,因此是8个字节。8字节*10000000000=80 GB内存。太过分了。
假设您有足够的内存,C#中数组的最大长度为int.MaxValue
,即2147483647(使用long
时为16GB)。