Als ik dit probeer uit te voeren
int N=10000000;
short res[N];
Ik krijg segmentatiefout 11
wanneer ik verander naar
int N=1000000;
short res[N];
het werkt prima
Antwoord 1, autoriteit 100%
U heeft uw stapelruimte overschreden die door het besturingssysteem is opgegeven. Als u meer geheugen nodig heeft, kunt u dit het gemakkelijkst dynamisch toewijzen:
int N=1000000;
short* res = new short[N];
Echter, std::vector
heeft de voorkeur in deze context, omdat het bovenstaande vereist dat je het geheugen met de hand free
.
int N = 1000000;
std::vector<short> res (N);
Als je C++11 kunt gebruiken, kun je mogelijk een fractie van de tijd besparen door ook unique_ptr
arrayspecialisatie te gebruiken:
std::unique_ptr<short[]> res (new short[N]);
Beide automatische methoden hierboven kunnen nog steeds worden gebruikt met de bekende res[index]
-syntaxis dankzij de overbelaste operator[]
, maar om de onbewerkte aanwijzer voor geheugenbewerkingen te krijgen je hebt res.data()
met vector
of res.get()
met unique_ptr
nodig.
Antwoord 2
Je kunt dat niet allemaal op de stapel verdelen. Probeer short* res = new short[10000000];
en vergeet niet op te ruimen.
Als alternatief kunt u std::vector<short> res(10000000);