Как правильно отсортировать динамически создаваемое хранилище с помощью функции, такой как calloc / malloc, чтобы она работала в режиме FIFO?

Я очень новичок в программировании и самоучка, так что прости меня, если я использую некоторую неправильную терминологию.

Я использую calloc () для создания пространства памяти в моей куче, которое я могу гарантировать инициализировать, так как в него не вставляются ненужные значения. Из наблюдения за поведением calloc кажется, что есть один единственный указатель, используемый для указания на весь блок адресов указанного типа размера. Как только я увеличиваю, чтобы сохранить что-то в следующем адресе, больше ничего не указывает на предыдущий адрес. Я искал здесь ответы и не мог ничего написать. В конце концов я просто сделал счетчик, чтобы отслеживать, сколько раз я увеличивал указатель, затем уменьшал на эту величину, а затем для чтения из моего динамически создаваемого массива я снова увеличивал его.

Хотя это сработало, я не могу не думать, что есть лучший способ сделать это. Я также думаю, что я достаточно далеко продвинулся туда, куда я могу добраться, используя плохую методологию, но не достаточно осведомлен, чтобы даже знать, какие термины использовать при попытке исследовать мою проблему. Я понимаю, что массив calloc хранится в куче, пока я не освобожу все смежные места, выделенные для него. Я начал искать «сортировку кучи», но я считаю, что это выходит за рамки моих возможностей и слишком сложно для того, что я пытаюсь сделать. Я также сохранил его в предопределенном массиве, работающем в качестве буфера, но опять же я хотел бы только читать из массива calloc напрямую, даже если для этого требуется использовать другой указатель. Чтобы избежать дальнейших разговоров, если кто-то может быть так любезен, чтобы указать мне в правильном направлении. Спасибо.

-2

Решение

Держите переменную, которая отслеживает исходный указатель, возвращенный calloc.

Кроме того, вы можете получить доступ к различным значениям в calloc, рассматривая его как массив.

Если вы разместите код, я могу привести пример.

0

Другие решения

А пока просто забудьте о функциях уровня C, таких как malloc а также free,

Также забудьте о таких же операторах уровня C ++, как new а также delete,

использование std::queue от <queue> заголовок.


Пример использования:

#include <iostream>
#include <queue>
using namespace std;

auto main() -> int
{
queue<int> q;
q.push( 7 );
for( int i = 1; i <= 29; ++i )
{
const int x = q.front();
q.pop();
if( x % 7 == 0 )
{
for( int j = 0; j < 10; ++j )
{
q.push( 10*x + j );
}
}
cout << x << endl;
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector