Язык C: удалить последний элемент вектора - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь удалить последний элемент вектора.Возвращает 0, если вектор пуст, или 1, если нет.x принимает значение последнего элемента перед его выбрасыванием.

int vector_pop(struct vector *v, int *x)
{
    if (v->size == 0)
    {
        return 0;
    }
    x = v->data[v->size];
    free(v->data[v->size]);
    return 1;
}

1 Ответ

0 голосов
/ 07 декабря 2018

Поскольку ваш вектор содержит int s, вы не free его элементы индивидуально.Простым вариантом является полное удаление free, и убедитесь, что вы уменьшаете размер до того, как удалит элемент из вектора:

if (v->size == 0)
{
    return 0;
}
v->size--;
*x = v->data[v->size]; // Note the asterisk
return 1;

Важно следить за обоимивыделенный размер и эффективный размер при реализации собственного динамического вектора.v->size сообщает вам, сколько элементов установлено в вашем векторе, в то время как v->allocated_size должно сообщать вам, сколько элементов вы можете вставить в вектор без перераспределения памяти в v->data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...