2016-12-08 3 views
0

Immer wenn ich diese Zeile von C++ - Code ausführe, stürzt das Programm, in dem die Zeile ausgeführt wird, während der Laufzeit ab (ein Fenster erscheint, das anzeigt, dass das Programm nicht mehr reagiert). Die Kompilierung wird ohne Ausnahmen ausgeführt.Warum verursacht diese Array-Initialisierung in C++ einen Absturz?

int arr[1000000]; 

Ich erwarte diese Initialisierung einfach mit einer Million man Elemente eine int Array zu initialisieren. Danach habe ich versucht, einen Zeiger mit new zu initialisieren, der auf einen 1000000 Element int Array-Speicherblock zeigte und dann den Zeiger auf das Array setze, das ich verwenden werde, aber das ist fehlgeschlagen. Wie kann ich ein solches Array erfolgreich initialisieren?

Ich verwende die neueste Version von MinGW auf Windows 10 zu kompilieren.

+4

zugewiesen werden. Voting zum Schließen als fehlendes reproduzierbares Beispiel. Es spielt eine Rolle, wo die Deklaration ist, welcher Compiler Sie verwenden, auf welchem ​​System und welche Optionen Sie verwenden. Aber im Allgemeinen ist der praktische Weg, 'std :: vector' zu verwenden. –

+0

Lesen Sie mehr über [call stacks] (https://en.wikipedia.org/wiki/Call_stack). Sie sind praktisch in der Größe begrenzt (oft auf ein oder ein paar Megabyte auf Desktop-Computern), aber das Limit ist spezifisch für Ihren Computer und Ihr Betriebssystem. –

+0

Ich habe eine Lösung für mein Problem gefunden und werde die Antwort posten, sobald die Frage nicht mehr beantwortet wird. –

Antwort

1

Sie versuchen, ~ 4MB zuzuweisen (unter der Annahme int ist 4 Bytes), die größer als das ist, was auf dem Stapel zugeordnet werden kann. Ein Array dieser Größe muss auf dem Heap typischerweise mit dem new[] Operator

+1

'malloc' ist in einer C++ Antwort sehr ungood. –

+0

@ Cheersandhth.-Alf Ich sah nicht die C++ - Tag, aber ich denke nicht, dass das der Punkt hier ist ... was nur Wissen von Stack vs Heap ist – Itsik

+0

@StoryTeller: Der Maschinenstapel kann ziemlich begrenzt sein, je nach Compiler und Optionen. Und ja, es kann bei einem 32-Bit-System bis zu ein paar MB betragen. –

Verwandte Themen