segmentation fault 11 in C++ auf Mac
Wenn ich versuche, führen diese
int N=10000000;
short res[N];
Bekomme ich einen segmentation fault 11
wenn ich auf
int N=1000000;
short res[N];
funktioniert es einwandfrei
- Stack-Overflow
- Also, was ist dein Problem? Sie versuchen sollen einen Puffer auf dem Stapel, wahrscheinlich zu groß für die Umwelt. Es gibt eine Grenze auf stack-Größe. Wenn Sie brauchen, um zu erstellen einen Puffer, der groß ist, wird es sholud über new() auf dem heap.
- Nicht, du meinst Stack-Overflow?
- möglich Lesen möchten "Segmentation fault" auf großes array-Größen oder Erstellen einer 2-dimensionalen array einer struct Ergebnisse in crash
- mögliche Duplikate von "Segmentation fault" auf großes array-Größen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie überschritten Ihre stack-Speicherplatz von der OS. Wenn Sie mehr Arbeitsspeicher benötigen, ist der einfachste Weg, um Speicher dynamisch:
Jedoch
std::vector
ist dabei bevorzugt, da die oben erfordert, dass Siefree
den Speicher von hand.Wenn Sie mit C++11, können Sie möglicherweise sparen Sie einige Bruchteil der Zeit durch die Verwendung von
unique_ptr
array Spezialisierung, zu:Sowohl von den automatischen Methoden, die oben erwähnt sind, können noch verwendet werden, vertraut
res[index]
syntax Dank überlastetoperator[]
, sondern um die raw-pointer für die Speicher-Operationen, die Sie brauchen würderes.data()
mitvector
oderres.get()
mitunique_ptr
.Kann man nicht reservieren, alle, die auf dem stack. Versuchen
short* res = new short[10000000];
und vergessen Sie nicht, zu bereinigen.Alternativ können Sie
std::vector<short> res(10000000);