我正在尝试实现 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;
}
[...]
欢迎任何改进问题的提示。
最佳答案
if(head->number == _number)
永远不应该这样检查。当 head 不为空时,您应该取消引用它。
即:
if(head && head->number == _number)
同时避免使用关键字作为函数/变量名
关于c++ - 删除链接列表的项目时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025518/