引述:
测试 if (allocbuf + ALLOCSIZE - allocp >= n) { 检查是否有足够的空间来满足对 n 个字符的请求。如果有,allocp 的新值最多会超出 allocbuf 的末尾。
它涉及的代码:
#define ALLOCSIZE 10000 /* size of available space */
static char allocbuf[ALLOCSIZE]; /* storage for alloc */
static char *allocp = allocbuf; /* next free position */
char *alloc(int n)
/* return pointer to n characters */
{
if (allocbuf + ALLOCSIZE - allocp >= n) { /* it fits */
allocp += n;
return allocp - n; /* old p */
} else
/* not enough room */
return 0;
}
void afree(char *p) /* free storage pointed to by p */
{
if (p >= allocbuf && p < allocbuf + ALLOCSIZE)
allocp = p;
}
那么怎么能超出allocbuf中的最后一个位置呢?在我看来是 allocbuf[9999]
除此之外的任何东西,例如。allocbuf[10000] 不正确,是内存泄漏,对吗?
问题的第二部分 - 我虽然根据其名称的自由函数正在删除保存在数组中特定位置的值。但是,正如我所见,它只是将“记录头”移动到数组左侧的几个位置?保存在那里的数据保持不变。