gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:19:58 25 4
gpt4 key购买 nike

我正在尝试实现 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com