Я работаю над школьным проектом, и я столкнулся с какой-то странной проблемой, когда я не могу выделить размеры 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;
}