web-dev-qa-db-fra.com

erreur de segmentation 11 en C++ sur Mac

Quand j'essaye de courir ça

int N=10000000;
short res[N];

Je reçois la faute de segmentation 11

quand je change de 

int N=1000000;
short res[N];

ça fonctionne bien

9
mariusz2108

Vous avez dépassé votre espace de pile donné par le système d'exploitation. Si vous avez besoin de plus de mémoire, le plus simple est de l’allouer dynamiquement:

int N=1000000;
short* res = new short[N];

Cependant, std::vector est préférable dans ce contexte, car ce qui précède vous oblige à free la mémoire à la main.

int N = 1000000;
std::vector<short> res (N);

Si vous pouvez utiliser C++ 11, vous pouvez éventuellement économiser une fraction de temps en utilisant la spécialisation de tableaux unique_ptr:

std::unique_ptr<short[]> res (new short[N]);

Les deux méthodes automatiques ci-dessus peuvent toujours être utilisées avec la syntaxe habituelle res[index] grâce à operator[] surchargé. Toutefois, pour obtenir le pointeur brut pour les opérations en mémoire, vous devez utiliser res.data() avec vector ou res.get() avec unique_ptr.

13
Bartek Banachewicz

Vous ne pouvez pas allouer tout cela sur la pile. Essayez short* res = new short[10000000]; et n'oubliez pas de nettoyer.

Sinon, vous pouvez utiliser std::vector<short> res(10000000);

0
IdeaHat