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

пространство, необходимое: 2 * 8 * 10^6 байтПростой многомерный массив C-стиль дает ошибку сегментации: 11

Он не должен использовать всю память, не так ли?

+11

Это очень большой массив. Я бы сделал ставку на переполнение стека. – chris

+0

Является ли это локальной переменной? Если это так, все это попадает в стек, что может быть недостаточно большим. –

+1

Вам не кажется, что, возможно, вы могли бы просто сделать это с помощью 1-мерного массива: 'vector > c_array (1000000)' – paddy

ответ

8

Для каждого процесса существует ограничение размера стека. Поэтому, если вы действительно хотите создать этот массив локально (в стеке), единственным решением является увеличение ограничения размера стека для вашей программы. Как изменить ограничение размера стека, зависит от вашей ОС.

Альтернативой является создание этого массива в куче. Для этого вам нужно использовать «новое» ключевое слово следующим образом.

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

Может захотеть сохранить это в умном ptr. – Borgleader

+3

Я бы переключил альтернативы. Увеличение стека действительно необычно и может иметь серьезные побочные эффекты в системе. – SomeWittyUsername

+0

'ошибка: не может преобразовать 'std :: complex (*) [2] [2] [2] [2] [2]' to 'std :: complex *' в инициализации' - словом: t использовать многомерные C-массивы, их просто сложно привыкнуть. –

Смежные вопросы