代码:
typedef long Align;
union header {
struct {
union header *ptr;
unsigned size;
} s;
Align x;
};
typedef union header Header;
................
................
................
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)
return NULL;
up = (Header *) cp;
up->s.size = nu;
free((void *)(up+1));
return freep;
}
怀疑:
考虑 morecore 函数从其他函数调用并从参数(nu)接收 4 作为 int。我对以下陈述有疑问。
cp = sbrk(nu * sizeof(Header));
if (cp == (char *) -1)
return NULL;
up = (Header *) cp;
up->s.size = nu;
up 只是一个指向 Header 的指针。但是,它仍然没有指向任何 Header 变量。sbrk 分配请求的内存并返回当前程序中断并将其存储在 cp 中。然后将存储在cp中的地址强制转换并分配给up。现在, up 包含由 sbrk 作为指向 Header 变量的指针返回的地址。然后出现以下语句,
up->s.size = nu;
up
仅包含 sbrk 返回的地址。那么上面的语句如何将 nu 存储在 size 变量中。