Я пытаюсь проверить связанный список на наличие дублирующихся значений в списке, но по какой-то причине я получаю ошибку segfault.
Это функция, которую я написал для проверки на наличие дублирующих номеров:
void dup_checker(t_stack *stack, int value)
{
int counter;
counter = 0;
while (stack)
{
if ((stack->elem == value) && (counter < 3))
counter++;
if (counter == 2)
error_msg();
stack = stack->next;
}
}
Программа завершается с ошибкой в этой строке:
if ((stack->elem == value) && (counter < 3))
В то время как l oop в моем dup_checker не может получить нулевой указатель. Я даже использовал и если заявление, чтобы проверить, но все еще не удается. Оператор if:
if (stack != NULL)
Это моя функция для pu sh нового значения в стеке:
void push(t_stack **curr, const char *elem)
{
t_stack *new;
int value;
digit_checker(elem);
value = ft_atoi(elem);
if (!(new = (t_stack *)malloc(sizeof(t_stack))))
return ;
new->elem = value;
new->next = (*curr);
new->index = 1;
(*curr) = new;
dup_checker((*curr), value);
}
Это моя основная функция:
int main(int ac, char **av)
{
t_stack *stack_a;
t_stack *stack_b;
if (ac > 1)
{
ac--;
stack_b = NULL;
while (ac > 0)
push(&stack_a, av[ac--]);
//normalizer(&stack_a);
//check_args(&stack_a, &stack_b);
//is_sorted(stack_a, stack_b);
}
return (0);
}
Я использовал отладчик, и вот результат, который я получил:
Program received signal SIGSEGV, Segmentation fault.
0x0000555555555a96 in dup_checker (stack=0xe48348e289485ed1, value=2) at sorter.c:57
57 if ((stack->elem == value) && (counter < 3))
Я также использовал valgrind, чтобы найти проблему, но безуспешно.
Ранее я писал этот код на Машина MA C, и она работала без проблем, но сейчас я использую Ubuntu и у меня есть эта проблема. Какие-нибудь решения?