ссылаясь на этот код от Кернигана и Ритчи (2-е издание, стр. 188),
static Header* morecore(unsigned nu) {
char *cp, *sbrk(int);
Header* up;
if (nu < NALLOC)
nu = NALLOC;
cp = sbrk(nu * sizeof(Header));
if (cp == (char*) -1) /* No space at all */
return NULL;
up = (Header*) cp;
up->s.size = nu;
free((void*)(up+1));
return freep;
}
Вопрос здесь в том, что происходит, когда значение, возвращаемое sbrk
, похоже на 101, выравнивание будет недействительным, когда присваивание указателя up
выполняется в строке up = (Header*)cp;
У этого может быть действительно очевидный ответ, так что извините, если я его пропустил!