引用從Kernighan和Ritchie代碼(第2版第188頁),對齊問題分配SBRK的指針的結果時 - K&R
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;
這可能有一個非常明顯的答案,所以很抱歉,如果我錯過了!
發生了什麼是未定義的。在實踐中,這可能意味着該程序按預期工作,它按預期工作但速度較慢,或者因對齊錯誤而崩潰。 –