C:链接列表segfaults.while conditon fail to evaulate to check for NULL.

我试图检查一个链接列表中的重复值,但由于某些原因,我一直得到一个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))

我的dup_checker中的while循环没有接收到一个NULL指针。我甚至使用了if语句来检查,但仍然失败。if 语句。

if (stack != NULL)

这是我的函数,用来向堆栈推送一个新的值。

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查找问题,但没有成功。

我之前在MAC机器上写了这段代码,工作起来没有问题,但我现在用Ubuntu,却出现了这个问题。有什么解决办法吗?

解决方案:

关于:

t_stack *stack_a;

if (ac > 1)
{
    ac--;
    while (ac > 0)
        push(&stack_a, av[ac--]);

变量指针: stack_a 没有被初始化,所以包含了程序堆栈中该位置的垃圾。 要修复,建议把

t_stack *stack_a;

替换为

t_stack *stack_a = NULL;

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在swift[复制]中打印一个没有括号和逗号的洗牌数组?

2022-9-13 15:57:39

未分类

AWS Elastic Beanstalk部署持续时间是否取决于实例类型?

2022-9-13 16:08:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索