我有一个程序必须从文本文件中获取输入,使用此输入创建链接列表,然后才能添加,删除,修改和查询链接列表。
我的查询和修改功能正常。我的删除功能在特定情况下失败,我正在努力使用添加功能。没有来自编译器的错误帮助。如果有人能指出我正确的方向,将不胜感激。
添加功能给我带来了最大的问题。经过几个小时的调试和同事的帮助,我最接近添加的东西正在改变
更新:感谢大家的反馈!我最终在一位同事的帮助下发现了我遇到的主要问题。显然我传递的是一个值而不是一个引用。 **为添加和删除功能都做了诀窍。
void add(employee **head, int addEMP_ID, char* addName, int addDept, int addRank, double addSalary) {
}
void delete(employee **head, int option) {
}
答案 0 :(得分:0)
如果头节点是您要删除的节点,则在调用函数delete后将释放该节点。但是,头指针仍然指向已经释放的头节点。这就是导致seg故障的原因。
改变的一种方法是:
void delete(employee **head, int option) {
employee* current;
employee *del;
current = *head;
if (current != NULL) {
if (current->EMP_ID == option) {
del = *head;
*head = *head->next;
free(del);
return;
}
while (current->next != NULL) {
if (current ->next->EMP_ID == option) {
del = current -> next;
current->next = current ->next->next;
free(del);
return;
}
current = current -> next;
}
}
return;
}
答案 1 :(得分:0)
需要考虑两件事。
启动伪OOP,将指针传递给struct List
而不是struct Node
。
typedef struct structList {
employeeData *head;
} EmployeeList;
使用double-pointer iterator插入和删除。