引用 Kernighan 和 Ritchie 的代码(第 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;
这可能有一个非常明显的答案,如果我错过了,非常抱歉!