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

przestrzeń potrzebną: 2 * 8 * 10^6 bajtówProste wielowymiarowa tablica w stylu C daje winy segmentacji: 11

Nie należy wykorzystać wszystkie pamięci, prawda?

+11

To bardzo duża tablica. Założę się, że przepełnienie stosu. – chris

+0

Czy jest to zmienna lokalna? Jeśli tak, to wszystko kończy się na stosie, który może nie być wystarczająco duży. –

+1

Nie sądzisz, że może mógłbyś to zrobić z tablicą 1-D: 'wektor > c_array (1000000)' – paddy

Odpowiedz

8

Istnieje limit wielkości stosu dla każdego procesu. Dlatego jeśli naprawdę chcesz utworzyć tę tablicę lokalnie (w stosie), jedynym rozwiązaniem jest zwiększenie limitu rozmiaru stosu dla twojego programu. Sposób zmiany limitu wielkości stosu zależy od systemu operacyjnego.

Alternatywą jest utworzenie tej tablicy w stercie. Aby to zrobić, musisz użyć słowa kluczowego "new" w następujący sposób.

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

Może chcesz zapisać to w inteligentnym ptr. – Borgleader

+3

Zmieniłbym alternatywy. Zwiększenie stosu jest naprawdę niezwykłe i może mieć poważne skutki uboczne. – SomeWittyUsername

+0

'błąd: nie można przekonwertować 'std :: complex (*) [2] [2] [2] [2] [2]' na 'std :: complex *' in initialization' - w skrócie: just don ' • używają wielowymiarowych macierzy C, do których trudno się przyzwyczaić. –