布尔方法上的分段错误11

时间:2014-11-27 11:10:45

标签: c pointers segmentation-fault

我尝试使用一种方法返回1表示true,0表示返回false,但它给了我" Segmentation fault:11"如果它返回false。我一直在试图弄清楚我在哪里乱搞但我似乎无法找到任何东西。

这是我的代码。

首先调用函数

int delete_number;
printf("Select a number to remove from list?\n");
scanf("%i", &delete_number);


if(remove_num(delete_number))
{
    printf("Deleted %i ", delete_number);
}
else
{
    printf("number %i not found in list", delete_number);
}

现在功能本身

int remove_num(int data) 
{
    int result = 0;
    node *curr_ptr;
    node *prev_ptr;
    node *temp_ptr;

    if(queuer.first != NULL)
    {
        if(queuer.first->data == data)
        {
            temp_ptr = queuer.first;
            queuer.first = queuer.first->next;

            if(queuer.first == NULL)
            {
                queuer.last = NULL;
            }

            free(temp_ptr);
            result = 1;
        }
        else
        {
            prev_ptr = queuer.first;
            curr_ptr = queuer.first->next;

            while(curr_ptr->data != data && curr_ptr != NULL)
            {
                prev_ptr = curr_ptr;
                curr_ptr = prev_ptr->next;
            }

            if(curr_ptr != NULL)
            {
                temp_ptr = curr_ptr;
                prev_ptr->next = temp_ptr->next;

                free(temp_ptr);
                result = 1;
            }
        }
    }

    return result;
}

我可能误解了seg。错误,但我的想法是,这是因为我如何通过while循环运行列表。正如我所说,当用户输入列表中存在的数字时,它可以正常工作。当输入的数字不在列表中时,会发生seg.fault。

2 个答案:

答案 0 :(得分:2)

您需要更改:

        while(curr_ptr->data != data && curr_ptr != NULL)

为:

        while(curr_ptr != NULL && curr_ptr->data != data)

&&中的测试是从左到右执行的。在您确认其有效之前,您不能取消引用curr_ptr

答案 1 :(得分:1)

您可以尝试更改while循环中的条件吗?

while(curr_ptr->data != data && curr_ptr != NULL)
{
    prev_ptr = curr_ptr;
    curr_ptr = prev_ptr->next;
}

当curr_ptr为NULL时,您似乎可能正在访问数据(curr_ptr->数据)。