Итак, я пытаюсь создать систему управления памятью. Для этого у меня есть установленное количество пространства (выделенное malloc), а затем у меня есть функция myMalloc, которая по существу возвращает указатель на выделенное пространство. Поскольку затем мы попытаемся освободить его, мы пытаемся установить заголовок выделенного пространства равным размеру выделенного пространства, используя memset.
memset(memPtr,sizeBytes,sizeof(int));
Затем нам нужно прочитать это, чтобы увидеть его размер. Мы пытаемся сделать это, используя memcpy и получая первые байты sizeof (int) в переменную. В целях тестирования мы просто пытаемся сделать memset, а затем сразу же получить размер обратно. Я включил весь метод ниже, чтобы вы могли видеть все объявления. Любая помощь будет принята с благодарностью! Спасибо!
void* FirstFit::memMalloc(int sizeBytes){
node* listPtr = freelist;
void* memPtr;
// Cycle through each node in freelist
while(listPtr != NULL)
{
if(listPtr->size >= sizeBytes)
{
// We found our space
// This is where the new memory allocation begins
memPtr = listPtr->head;
memset(memPtr,sizeBytes,sizeof(int));
void *size;
memcpy(size, memPtr, sizeof(int));
// Now let's shrink freelist
listPtr->size = listPtr->size - sizeBytes;
int *temp = (int*)listPtr->head + (sizeBytes*sizeof(int));
listPtr->head = (int*) temp;
return memPtr;
}
listPtr = listPtr->next;
}
:: Edit ::
Сожалею! При выполнении этого мы продолжаем получать ошибку сегмента при попытке запустить строку memcpy. Последние несколько часов мы играем с разными идеями и, честно говоря, просто не знаем, где происходит ошибка.
:: Edit2 ::
Я также опубликовал это в качестве комментария, но решил, что я тоже разместил его здесь, чтобы его было легче найти ...
Наша проблема в том, что у нас есть выделенное пространство, с которым нам разрешено работать, указанное одним вызовом malloc для 128 МБ. Мы можем использовать только это, поэтому мы не можем инициализировать размер с помощью malloc. Я думаю, есть ли способ сделать это без инициализации размера. Если нет, то есть ли получить int, для которого установлен заголовок, без использования memcpy.