首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# System.OverflowException

c# System.OverflowException
EN

Stack Overflow用户
提问于 2015-12-31 15:30:12
回答 2查看 410关注 0票数 1

这是我的密码:

代码语言:javascript
复制
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];
}

当我输入10000000000表示"num“时,我得到

"System.OverflowException算术操作导致溢出。“

我该怎么做才能修好它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-31 15:34:27

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

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

票数 4
EN

Stack Overflow用户

发布于 2015-12-31 15:33:30

您的代码溢出,因为C#中数组的最大大小是Int32.MaxValue,它等于2147483647。您可以在源代码中看到这方面的提示,并且在文档中有明确的说明。

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34548429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档