Как выделить память для массива очередей по malloc?
Так же, как вы сделали в своем примере. Технически, это не распределение, это неправильно. Хотя, см. † .
Где я ошибся?
Вы только выделили некоторое количество памяти для очередей. Вы никогда не создавали какой-либо объект очереди в этот блок памяти. Динамические объекты создаются с использованием выражения new. Чтобы создать объект в блоке памяти, выделенном malloc
, вы можете использовать синтаксис размещения с новым.
Как правильно распределить память?
Не используя malloc
.
† Нет веских причин для использования malloc
в C ++.
Вот правильный способ выделить динамическую память для массива из 16 очередей, а также построить эти очереди:
std::vector<std::queue<int> > pq(16);
Вектор позаботится о многочисленных проблемах, которые вы могли бы выстрелить себе в ногу в противном случае. Он позаботится о создании и уничтожении элементов, избежании утечек памяти и двойного удаления, а также о более тонких вопросах, таких как безопасность исключений.