2013-07-08 8 views
6
const int L=10; 
std::complex<double> c_array[L][L][L][L][L][L] // 6 dimensions 

Raum benötigt: 2 * 8 * 10^6 BytesEinfacher mehrdimensionale C-Stil-Array gibt Segmentierungsfehler: 11

Es soll nicht die gesamten Speicher aufbrauchen, nicht wahr?

+11

Das ist ein sehr großes Array. Ich würde einen Stapelüberlauf wetten. – chris

+0

Ist das eine lokale Variable? Wenn dies der Fall ist, landet das alles auf dem Stapel, der möglicherweise nicht groß genug ist. –

+1

Denkst du nicht, dass du das vielleicht mit einem 1-D-Array machen könntest? 'Vector > c_array (1000000)' – paddy

Antwort

8

Es gibt eine Stapelgrößenbeschränkung für jeden Prozess. Wenn Sie dieses Array wirklich lokal (im Stapel) erstellen möchten, besteht die einzige Lösung darin, die Begrenzung der Stapelgröße für Ihr Programm zu erhöhen. Wie Sie das Limit für die Stapelgröße ändern, hängt von Ihrem Betriebssystem ab.

Alternative besteht darin, dieses Array im Heap zu erstellen. Dazu müssen Sie das Schlüsselwort "new" wie folgt verwenden.

std::complex<double> *c_array = new std::complex<double>[L][L][L][L][L][L]; 
+0

Vielleicht möchten Sie das in einem Smart-Ptr speichern. – Borgleader

+3

Ich würde die Alternativen wechseln. Das Erhöhen des Stacks ist wirklich ungewöhnlich und kann schwerwiegende Systemnebenwirkungen haben. – SomeWittyUsername

+0

'Fehler: kann 'nicht konvertieren std :: complex (*) [2] [2] [2] [2] [2]' zu 'std :: komplex *' in initialization' - kurz: just don ' t verwenden mehrdimensionale C-Arrays, sie sind nur schwer zu gewöhnen. –

Verwandte Themen