Распределитель работает хорошо, кроме номеров 1,2 и 3 - PullRequest
0 голосов
/ 15 марта 2020

Я работаю над школьным проектом, и я столкнулся с какой-то странной проблемой, когда я не могу выделить размеры 1,2 и 3 байта. Другие номера работают как шарм. Где может быть проблема?

Похоже, что эти 2 строки как-то вызывают это:

*((int*)p) = -1* size;
*((int*)(p + size)) = newsize;

Когда я использую printf на ((int ) p) до второго строка, где я назначаю новый размер следующему блоку, показывает правильное значение, но в тот момент, когда я использую prinf после этой строки, я получаю странные числа ..

Код:

void* memory_alloc(unsigned int size)
{
    char* p = start; //Pointer to start of array
    while (p != NULL && size != 0)
    {
        int sizee = *((int*)p);
        printf("Sizee: %d\n", sizee);
        if (sizee> 0 && sizee>= size + sizeof(int))
        {
            //If remaining size is greater then size of header
            if (sizee- size > sizeof(int))
            {
                int newsize = sizee- size - sizeof(int);
                printf("Newsize: %d\n", newsize);
                *((int*)p) = -1* size;
                *((int*)(p + size)) = newsize;

                return (void*)(p + sizeof(int));
            }
            //If too small allocate whole rest
            else if (sizee-size<=sizeof(int))
            {
                *((int*)p) = sizee* (-1);
                return (void*)(p + sizeof(int));
            }
            else
                return NULL;
        }
        //If it is allocated move in array , allocated numbers are - that is why *(-1)
        else if (velkost < 0 && p + velkost * (-1) != NULL)
            p = p + velkost * (-1);
        //If block lesser than required size
        else if (sizee < size + sizeof(int) )
            return NULL;

        else
            p = p + sizee;
    }
    return NULL;
}
...