Top.Mail.Ru
Ответы

Как в СИ реализовать симуляцию динамической памяти с помощью массива char-ов?

Есть задание, на входе дается unsigned int размер нужного массива, функция должна вернуть указатель на успешно взятую память. Тоесть например: Мы создаем нулевой массив на 100 чаров, нам приходит запрос на 10, функция должна эти 10 "Аллоцировать" после чего вернуть указатель на них. Я понимаю все, кроме того что значит вернуть указатель. Представим, что я использую 1 дополнительный байт для создания там "Головы" куска памяти, который будет хранить инфо о длине и свободности/занятости этого куска, как мне вернуть указатель на него?) Я не очень понимаю, заранее спасибо за любой ответ

По дате
По рейтингу
Аватар пользователя
Новичок

//берем память на куче
char *memoryptr = malloc(100);

//создаем указатель на первую неиспользованную ячейку
void *firstfreebyte = (void*) memoryptr;
//тут храним сколько байтов есть свободных
int memremain = 100;

//функция-аллокатор
void *allocate (int bytes)
{
void *temp = NULL;
if (bytes <= memremain)//смотрим что места хватает
{
*temp = firstfreebyte;//указатель на первую ячейку
firstfreebyte += bytes;//пододвигаем указатель
memremain -= bytes;//уменьшаем счетчик свободной памяти
}
return temp;//возвращаем указатель
}

Аватар пользователя
Просветленный

Структурой - в структуре описание заголовка, память динамическая и прочая хрень. Точнее массив структур на несколько объектов и разные типы данных