2013-09-13 4 views
0

я кодирования объявить несколько больших массивов и делать манипуляции с элементами и т.д.bad_alloc при объявлении массива, кажется достаточно памяти

Когда код попадает в одну секцию, объявить временный массив, он подбрасывает bad_alloc после составляя около 1,8 м столбцов.

Кодекс:

int** tempArray1= new int*[PHLengths[n-1]]; 

for(int i =0;i<PHLengths[n-1];i++) { 

tempArray1[i]=new int[PrimeDatL]; 

} 

В рассматриваемом случае PrimeDatL ~ 417 и PHLengths [N-1] ~ 3630140.

Обычно я предполагаю, что это просто вопрос нехватки оперативной памяти (как это бывает, он будет заполнен, как определено в настоящее время, поэтому я МОГУТ объявлять динамический массив и заполнять/расширять вдоль пути), однако, когда я держу глаз на компьютерных ресурсах он идет примерно до 3 гб/5 гб, а затем дает ошибку.

Одна тонкость здесь заключается в том, что я использую ubuntu на виртуальном боксе, так что это может вызвать проблемы с адресом памяти? Неужели наивно думать, что эта ошибка возникает только тогда, когда я полностью из ОЗУ?

Я также попытался объявить его ранее в программе, чтобы увидеть, были ли проблемы с памятью на этом пути, та же проблема.

+1

Прочтите [это] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778 (v = vs.85) .aspx # memory_limits), если вы находитесь в Windows. Возможно, вам придется переключиться на режим 64-битного компилятора. – dasblinkenlight

ответ

1

Если вы находитесь на 32-битной машине, вы можете использовать только около 4 ГБ памяти, независимо от того, сколько у вас на самом деле есть, так что, вероятно, это будет причиной того, что она отслаивается между «3gb/5gb».

+0

Ах да, это хороший момент. Я думал, что установил 64-битную виртуальную машину, но, возможно, я этого не сделал ... спасибо! – zylatis

+0

Вы выделили достаточно памяти для виртуальной машины? Похоже на очевидный вопрос, на что можно было бы взглянуть. –

+0

Да, проблема, с которой я сейчас сталкиваюсь, заключается в том, сколько «достаточной» памяти (я не могу выделить ее полностью или хост заканчивается). Я напишу еще один вопрос относительно этого (сделать с размером mpz_class) Спасибо! – zylatis

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