Erreur de segmentation lors de la création d’un tableau en C

J’ai récemment migré vers un nouvel ordinateur portable – HP dv6119tx (Intel Core i5, 4 Go de RAM). Windows 7 Édition Familiale Premium 64 bits est installé.

J’essaie de créer un tableau de type int de longueur 10 ^ 6 en C ++ (Dev C ++), que je créais confortablement sur mon dernier ordinateur portable (Windows 32 Ultimate / Linux Ubuntu 32 bits, 2 Go de RAM) et tous les autres environnements I ont programmé (environ 3,5 Mo de RAM). Mais avec la configuration actuelle, je reçois une erreur “Erreur de segmentation” en mode débogage.

Capture d'écran lorsque j'essaie de créer un tableau de longueur 10 ^ 5

Capture d'écran lorsque j'essaie de créer un tableau de longueur 10 ^ 6

SCREENSHOTS (EDIT):
La première capture d’écran montre 10 ^ 5 travaillant sur la configuration actuelle et 10 ^ 6 pas. Je n’ai pas de capture d’écran pour 10 ^ 6 de travail sur ma dernière machine, mais je l’ai utilisée plusieurs fois.

MODIFIER:
Le programme fonctionnerait très bien si je déclarais le tableau comme global à la place ou le créais dynamicment sur le tas en tant que

 int* a = new int[MAX]; 

Mais ce que je ne comprends pas, c’est que, alors que la baie de disques locale utilise un maigre 3,5 Mo de mémoire sur la stack (et qu’elle fonctionne correctement sur une machine de 2 Go), pourquoi cette question devrait-elle faire surface avec une machine de 4 Go? Est-ce un problème d’espace de stack utilisateur? Peut-il être augmenté manuellement?

EDIT 2:
Je pose particulièrement cette question parce que j’ai soumis de nombreuses solutions sur SPOJ avec 10 ^ 6 baies de taille créées sur la stack. Avec ma configuration actuelle, je me sens handicapé de ne pas pouvoir le faire. Dans la mesure du possible, je préfère emstackr plutôt que tas car il n’ya pas de problème de fuite de mémoire; et des variables locales sur des variables globales, car elles sont ordonnées et ne gâchent pas l’espace de nommage.

Une stack de quatre mégaoctets est assez grosse. La taille par défaut sous Windows est de 1 Mo. Vous devez utiliser l’option /STACK sur l’éditeur de liens pour demander une taille supérieure.

Les tableaux ainsi créés sont stockés dans la stack. Cependant, la taille de la stack est très limitée et vous rencontrez donc un stackoverflow et un crash.

La façon de le faire est de l’allouer sur le tas:

 int *a = (int*)malloc(MAX * sizeof(int)); // Do what you need to do. // Free it when you're done using "a". free(a); 

Au lieu de mallocuer la mémoire, vous pouvez spécifier votre tampon comme static . Par exemple:

 static int a[MAX]; 

L’avantage de cette approche est que vous n’avez pas besoin de suivre votre allocation de mémoire.