2014-11-09 3 views
-1

У меня есть исследование, которое нужно сделать для предстоящей оценки C++, и у меня есть проблема с моей функцией deleteNode. Я знаю, что проблема находится где-то внутри функции, когда я скопировал предыдущую функцию deleteNode, и она отлично работала. Все мои другие функции pushback/pushfront работают нормально, я лучше знаю проблему, чем просто игнорировать ее, но я не могу ее заметить. для жизни меня.Исключение функции исключения связанного списка

Таким образом, связанный список хранит сотрудников с именем (строкой) и зарплатой (двойной). Мой deleteNode соответствует имени сотрудника и переданному параметру строки. Если кто-то может определить мою ошибку, это будет большой помощью для моего обучения!

bool EmployeeList::deleteNode(std::string n){ 
EmployeeNode *leadptr = head, *trailptr = nullptr; 

if (head != nullptr){ 
    if (head->emp.name == n){ 
     head = head->next; 
     delete leadptr; 
     return true; 
    } 
    else{ 
     while (leadptr != nullptr && leadptr->emp.name != n){ 
      trailptr = leadptr; 
      leadptr = leadptr->next; 
     } 
     if (leadptr = nullptr){ 
      return false; 
     } 
     else{ 
      trailptr->next = leadptr->next; //access violation here, leadptr may be null 
      delete leadptr; 
      return true; 
     } 
    } 
} 
} 
+2

'если (leadptr = nullptr)' Вы должны '' == здесь. – Maroun

+0

_ @ Mark Lordan_ Это может быть легко обнаружено при компиляции с включенными предупреждениями или, по крайней мере, при чтении этих предупреждающих сообщений. –

+0

@ πάνταῥεῖ Я не получил никаких предупреждающих сообщений, просто нарушение доступа без какой-либо полезной информации. Не могли бы вы объяснить, как я могу получить эти параметры предупреждения? – Mark

ответ

1

Это назначение

if (leadptr = nullptr){ 

коррекция будет

if (leadptr == nullptr){ 
+0

@MarkLordon Ошибки, подобные этому, уже были рассмотрены компилятором (они просто называются предупреждениями: предупреждения - это логические ошибки в вашем коде). Ваш код должен компилироваться с нулевыми предупреждениями. Вы можете заставить компилятор обрабатывать предупреждения, подобные ошибкам, с помощью простого флага, чтобы вы видели эти логические ошибки. Я бы также увеличил агрессивность предупреждений (с большим количеством флагов, увеличивающих количество предупреждений). –

Смежные вопросы