2015-06-12 2 views
0

Я создаю динамический 2-мерный массив и выделяю его. Мой цикл for дает ошибку после 10-15 запусков (не одинаковое значение каждый раз) с плохим распределением. Любая помощь будет оценена по достоинству.Выделение массива динамического 2

__int32 aLarge = 8121432; 
__int32 bLarge = 8121784; 
ActualPosition** myPositions; 

myPositions = new ActualPosition*[aLarge]; 

for (int x = 0; x < aLarge; x++) 
{ 
    try 
    { 
     myPositions[x] = new ActualPosition[bLarge]; 
    } 
    catch (bad_alloc& ba) 
    { 
     // Error here 
    } 
} 
+1

Какая проблема с высоким уровнем вы пытаетесь решить? Вы не можете выделить всю эту память на обычном компьютере. – PaulMcKenzie

+0

Возможно [вопрос X-Y] (http://meta.stackexchange.com/a/66378/137902)? – kebs

ответ

5

sizeof(ActualPosition) == 1 Если, то вам нужно будет 61,431 ГБ памяти для хранения вашего массива. Таким образом, у вас будет нехватка памяти, если у вас нет очень большого компьютера.

1

Как вы отметили вопрос с C++ и независимо от проблемы с размером памяти, вызванной @NathanOliver, я бы предложил использовать библиотечный контейнер для двумерных массивов.

Например:

std::vector<std::vector<ActualPosition>> myArray(aLarge); 
for(auto v: myArray) 
    v.resize(bLarge); 

Доступ элементы будут так же просто, как:

myArray[i][j] = somevalue; 

неограниченной проверки, или использовать at(), если вы хотите что-то более безопасное:

myArray.at(i).at(j) = somevalue; 

Если размер известен во время компиляции (что, похоже, имеет место в вашем коде), вы также можете используйте std::array.

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