Не уверен в правильности предложения из K&R -арифметика указателей | Процедура освобождения

Цитата:

The test if (allocbuf + ALLOCSIZE - allocp >= n) { checks if there's enough room to satisfy a request for n characters. If there is, the new value of allocp would be at most one beyond the end of 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] неверен и является утечкой памяти, я прав?


Вторая часть вопроса -Я думал, что бесплатная функция, судя по ее названию, удаляет значение, сохраненное в определенных местах массива. Однако, как я вижу, он просто перемещает «записывающую головку» всего на несколько мест влево от массива? Сохраненные там данные остаются нетронутыми.

5
задан Peter Cerba 14 August 2012 в 14:29
поделиться