Dynamic Allocation Example

struct ll {
    struct ll * next;
    void * data;
};

static struct ll * first, ** last = &first;

int add_ll_element(void * new_data)
{
     struct ll * new_member;

    if (NULL == (new_member = malloc(sizeof(struct ll)))) {
        return(-1);
    }

    *last = new_member;
    last = &new_member->next;
    new_member->next = NULL;
    new_member->data = new_data;
    return(0);
}

struct data * remove_ll_element()
{
    void * data;
    struct ll * old_member;

    if ((old_member = first)) {
        if (NULL == first = first->next)) {
            last = &first;
        }
        data = old_member->data;
        free(old_member);
    }
    return(NULL);
}
next slide