Мне любопытно, что должно происходить в вашем коде:
if (symp->next = 0){
symbolList.tail = previous;
previous->next =0;
} else {
previous->next = symp->next;
symp->next = 0;
}
Когда symb->next
не будет нулем? Вы ничего не делаете, если symb
пусто, поскольку головной узел также будет нулевым.
Запутанная часть заключается в том, что вы добавляете previous
к symb
в первом if (что всегда должно быть так), но в следующем вы добавляете symb
к previous
. Каково обоснование для этого второго, и в каком случае это когда-либо случится?
Как уже упоминали другие, если вы выделяете память, вам нужно ее освободить, иначе у вас есть утечка памяти, поскольку в C / C ++ нет сборщика мусора, поэтому каждый узел, который будет освобожден, должен быть освобожден.
symb->next = 0
, вероятно, является просто опечаткой, как указывалось, поскольку это всегда будет правдой, и это частая ошибка. То, что я начал делать, чтобы помочь поймать это, это сделать:
if (0 == symb->next)
, так что если вы сделали 0=symb->next
, вы получите ошибку компилятора.
UPDATE:
Как было указано в комментарии, эта функция всегда будет переходить к предложению 'else', что на самом деле может быть ожидаемым поведением.