2015-12-31 1 views
1

Donc voici mon code:C# System.OverflowException

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]; 
} 

Quand je rentre 10000000000 pour "num" Je reçois

"opération System.OverflowException Arithmétique a donné lieu à un trop-plein ."

Que dois-je faire pour le réparer?

+1

Je commencerais par l'attraper. – SBI

+0

Cela représente environ 80 Go de mémoire. Seuls les processus 64 bits peuvent gérer cela. –

+1

Le nombre que vous essayez d'utiliser va au-dessus de Int32.MaxValue et vous ne pouvez pas créer un tableau de cette taille. –

Répondre

4

D'accord, vous essayez d'allouer beaucoup de mémoire, car appeler long constructeur de tableau, libère en fait déjà la mémoire que vous avez demandé. Un long est 64 bits, donc 8 octets. 8 octets * 10000000000 = 80 Go de mémoire. C'est trop.

La longueur maximale d'un tableau en C# est int.MaxValue, soit 2 147 483 647 (16 Go en utilisant long), en supposant que vous avez suffisamment de mémoire.

9

Votre code déborde parce que la taille maximale d'un tableau en C# est Int32.MaxValue, ce qui équivaut à 2147483647. Vous pouvez voir des notes à celui du source code, et il est clairement indiqué dans le documentation:

Par par défaut, la taille maximale d'un tableau est de 2 gigaoctets (Go). Dans un environnement 64 bits , vous pouvez éviter la restriction de taille en définissant l'attribut activé de l'élément de configuration (<gcAllowVeryLargeObjects> introduit dans .NET 4.5) sur true dans l'environnement d'exécution . Cependant, le tableau sera toujours limité à un total de 4 milliards d'éléments, et à un indice maximum de 0X7FEFFFFF (2146435071) dans toute dimension donnée (0X7FFFFFC7 (2147483591) pour les tableaux d'octets et les tableaux de structures à un octet).