Измените ptr->size = NULL;
на ptr->size = size;
. Вам также необходимо вернуть ptr
или сохранить его где-нибудь. Ваша функция возвращает int
, но вы ничего не возвращаете. has_initialized
кажется ненужным - вы знаете, что инициализировали, потому что ваш пул памяти (значение ptr
, которое вы вернете) не NULL
. Если вам нужна дополнительная помощь, вам придется объяснить больше.
Добавление: вам необходимо решить, является ли memBlock.size размером выделенного пространства или размером блока памяти, представляемого memBlock ... если последнее, то вам необходимо учитывать пространство, занимаемое мембраной сам вычитая это из выделенного вами пространства: ptr->size = size - sizeof(struct memBlock);
Вам также нужен способ адресации вашего пула памяти ... так как он сразу следует за memBlock, его адрес равен (ptr + 1)
или &ptr[1]
(если вы не Чтобы понять это, найдите «арифметику указателей в C»).
P.S. Вы написали в комментарии: «По сути, у меня также есть другая функция, которая будет действовать как« malloc », чтобы зарезервировать количество байтов, но сначала проверит эту структуру данных, чтобы узнать, доступна ли какая-либо память из моего пула»
Почему вы хотите это сделать? malloc уже управляет памятью намного лучше, чем ваша функция, учитывая уровень навыков и затраченное время, и нет никакого смысла размещать другой распределитель памяти поверх него. Если это не школьный проект по написанию распределителя памяти, в этом случае вы должны сказать это заранее.