segmentatiefout 11 in C++ op Mac

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::vectorheeft 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_ptrarrayspecialisatie 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 vectorof res.get()met unique_ptrnodig.


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

Other episodes