Как упоминалось 1201ProgramAlarm , вам нужно установить next
на NULL
.
Но, поскольку вы используете current
, его окончательное значение никогда не передается обратно вызывающей стороне ( например, вам нужно установить *node
в конце).
Ваш внутренний while
l oop может быть перемещен выше вашего внешнего l oop.
И это намного проще разыменовать node
в начале и использовать одиночные косвенные указатели для основной части функции. Примечание: head
более наглядно описывает функцию, чем node
здесь.
Вот переделка вашего кода:
void
push(v_stack_t **head, int num_args, ...)
{
va_list ap;
v_stack_t *tail;
// find last element of list
tail = NULL;
for (v_stack_t *cur = *head; cur != NULL; cur = cur->next)
tail = cur;
va_start(ap, num_args);
for (int i = 0; i < num_args; i++) {
v_stack_t *new_node = malloc(sizeof(v_stack_t));
new_node->value = va_arg(ap, int);
new_node->next = NULL;
// append to tail of list
if (tail != NULL)
tail->next = new_node;
// add node at head of list
else
*head = new_node;
// set new element as tail of list
tail = new_node;
}
va_end(ap);
}