У меня есть кусок кода, который объявляет 3D-массив поплавков, который неуловимо компилируется.«std :: bad_alloc» в объявлении массива в корневом каталоге (CERN), в зависимости от размера массива
void ImageCombine()
{
float *doseArrayTotal = new float[2350][2350][2350];
float *doseArray1 = new float[1175][1175][1175];
// I have commented out the rest of my code whilst debugging.
}
Если doseArray1 дается размеры [2350] [2350] [2350] или [1024] [1024] [1024], он будет собирать. Учитывая размеры выше [1175] [1175] [1175] или [1000] [1000] [1000], это приведет к ошибке.
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Так я бегу этот код через кусок программного обеспечения под названием корня (страшное название), разработанной ЦЕРН, а вход я обеспечиваю для запуска этой функции.
[[email protected] mysim]$ root
root [0] .L ImageCombine.C
root [1] ImageCombine()
Любые советы относительно того, почему мой код не побежит, и как я мог бы быть в состоянии решить эту проблему было бы весьма признателен.
Приветствия Chris
Вы пытаетесь выделить слишком много условной памяти, на вашем компьютере недостаточно места для кучи. Поэтому, когда вы уменьшаете размеры массива, он работает. Вам необходимо рассмотреть способ обхода, например, меньшую схему хранения. – CoryKramer
Если вы уже обрабатываете массивы 'float' как плавающие указатели, не должен ли тип' float ***'? –
@CoryKramer замечает, что он работает с большими размерами, но не с smalelr –