c - bool 方法的段错误 11

标签 c pointers segmentation-fault

我正在尝试使用一种方法来返回 1(表示 true)和 0(表示 false),但如果返回 false,它会给出“段错误:11”。我一直在绞尽脑汁试图找出我哪里搞砸了,但我似乎找不到任何东西。

这是我的代码。

首先调用函数

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 循环运行列表。正如我所说,当用户输入列表中存在的数字时,它工作正常。当输入的数字不在列表中时,就会发生段错误。

最佳答案

您需要更改:

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

至:

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

&& 中的测试是从左到右执行的。在验证 curr_ptr 有效之前,不得取消引用它。

关于c - bool 方法的段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169246/

相关文章:

c - 将传输结束写入正在运行的进程的标准输入

C-OpenMP/尝试将递归代码与任务并行化,但速度较慢

C 过去论文中的指针

将位转换为人类可读的格式

c - C 方法编程中的段错误错误

python - 在 Ubuntu 18.04 上尝试在 Python (Anaconda) 中拟合 keras 模型时如何修复 "Segmentation fault (core dumped)"错误

C- 服务器/客户端,等待其他客户端然后退出

变量内容意外改变?

c - 将 "complex"结构写入 FIFO

c - C中文件操作中的段错误