c++ - 删除链接列表的项目时出现段错误

标签 c++

我正在尝试实现 Linked List按照这个example .

这是一份简历:

class Node {
    public:
        string name; 
        int number;
        Node *next;
        Node () {
            next = NULL;
        }
        Node (string _name, int _number) {
            name = _name;
            number = _number;
            next = NULL;
        }
};

class List {
    public:
        Node *head; 
        List () {
            head = NULL;
        }

        void push_back (string _name, int _number) {
            Node *neww = neww Node;
            neww->name = _name;
            neww->number = _number;
            if (head == NULL)
                head = neww;
            else {
                Node *whre = head;
                while (whre->next)
                    whre = whre->next;
                whre->next = neww;
            }
        }
        bool find (int _number) {
            Node *pointer = new Node;
            if (!head)
                return false;
            pointer = head;
            for (; pointer; pointer = pointer->next)
                if (pointer->number == _number)
                    return true;
            return false;
        }
        bool delete_item (int _number) {
            Node *pointer = new Node;
            if (!find(_number))
                return false;
            while (head->number == _number) //problem is here
                head = head->next;
            if (!head)
                return false;
            pointer = head;
            while (pointer) {
                if (pointer->next)
                    if (pointer->next->number == _number)
                        pointer->next = pointer->next->next;
                pointer = pointer->next;
            }
            return true;
        }
};

在 main() 中,我创建了一个 List 对象,压入一个元素并将其删除。工作正常。

但是当我使用 switch-case 菜单使事情更动态时,我得到了这个错误:

program received signal SIGSEGV, segmentation fault

我不知道这个错误是什么意思,也没有在谷歌上找到帮助。 我在相同情况下使用 delete_item(),除了 swtich-case 菜单。

任何提示我可以做什么?或者只是对此错误的解释。

这是我尝试删除的案例:

int number, choice;
do {
    cin >> choice;
    switch(choice){

        [...]

        case 5:{
            cout << "Number: ";
            cin >> number;
            if(!list_obj.delete_item(number))
                cout << "Not found." << endl;
            else
                cout << "Deleted." << endl;
            system("PAUSE");
            system("cls");
            break;
        }

        [...]

欢迎任何改进问题的提示。

Full code

最佳答案

if(head->number == _number)

永远不应该这样检查。当 head 不为空时,您应该取消引用它。

即:

if(head && head->number == _number)

同时避免使用关键字作为函数/变量名

关于c++ - 删除链接列表的项目时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025518/

相关文章:

c++ - 当 X 按钮使用 closeEvent 时如何只关闭子窗口?

c++ - find() 无法识别我的自定义迭代器

模板模板的 C++ 构造函数

c++ - 如何从排序的数据创建 vector map

c++ - 用 sfml 计算 FPS

c++ - "undefined reference to"共享库中的许多(全部?)函数(新手)

c++ - 如何将枚举传递给模板参数

c++ - 使用 boost 序列化时解决 sanitizer 错误

c++ - 在 Windows 上检测进程内存注入(inject)(反黑客)

C++ 动态 ND 数组