Мне было поручено кодировать реализацию алгоритма распределения друзей. Мне не очень комфортно с Си, и мое понимание указателей не так уж и велико. Я пытаюсь кодировать пользовательский распределитель памяти следующим образом:
Когда я впервые пытаюсь выделить память, я использую следующее:
head = sbrk(0);
printf("%p\n",sbrk(0));
sbrk(MAX_SIZE);
head = malloc(sizeof(head) + size);
head->free = false;
head->data = malloc(size);
head->size += size;
head->next = (void*)sbrk(0);
MAX_SIZE - это данность, а head - это пользовательскийSTRUCT. В начале это неинициализировано. По какой-то причине значение head-> next и sbrk (0), напечатанные в начале, не всегда совпадают. Иногда они оба будут равны одной и той же вещи, например: 0x7e357000, но иногда моя голова-> следующая будет принимать гораздо большее значение, например: 0xffffffffa4d8b000. Кажется, нет никаких причин, почему эти значения иногда совпадают. Кто-нибудь может объяснить это?