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
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
.
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);