2015-07-30 4 views
-2

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

struct myKernel 
{ 
     uint8_t **var; 
     myKernel(){} 
     myKernel(const int number = 2) 
     { 
//I want to do something like 
//var = new int*[number]; but not allocate it on the heap 
      *var = a[number]; 
     } 
     void operator() 
     { 
     //do stuff here with the var array 

     } 

}; 

Благодарим за внимание!

+2

Ну, если не на куче, где еще? – Columbo

+0

Что вы подразумеваете под «статикой»? 'var' здесь не' статический '. Кроме того, вы должны либо использовать 'std :: vector ', либо вручную выделять память в куче с помощью 'var = new uint_8 * [number]' (если по статике вы имели в виду «в стеке», я не что VLA являются стандартными C++ именно из-за 'std :: vector', и я не уверен, что это хорошая идея, если' number' большой). – Caninonos

+0

Я, хотя выделил его в стек, решение было бы использовать шаблоны, я не думал об этом в начале, так что извините, я все еще учась, я отправлю код, как только я это сделаю .... спасибо любым способом –

ответ

1

Если вы хотите, чтобы что-то было выделено во время выполнения (т. Е. На основе информации о времени выполнения), то у вас есть, чтобы использовать распределение на основе кучи.

Альтернативой может быть использование std::vector и использование resize, но там все равно будет какое-то динамическое размещение.

+1

Вы можете динамически выделять стек. Это то, для чего используется новое место размещения. – NathanOliver

+1

Возможно, я ошибаюсь, но это больше не распределение, это построение из необработанной памяти, не так ли? Я имею в виду, что нет распределения памяти, если вы используете размещение new таким образом. – Telokis

+1

I second Ninetainedo, (если я не ошибаюсь) размещение new только конструирует объект, предполагается, что вы уже выделили память по адресу, который вы ему предоставляете. Таким образом, вы можете использовать новое размещение в адресе стека, но вам придется заранее назначить (иногда большой) фиксированный размер «буфера» с фиксированным размером. – Caninonos

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