Кажется, что вы удаляете следующий и предыдущий узлы списка из деструктора. Что, если pNext
и pPrev
равны LinkedListNode*
, означает, что вы рекурсивно удаляете весь список: - (
Попробуйте это:
std::string LinkedList::RemoveFront()
{
LinkedListNode *n = pHead->GetNext(); // the node we are removing
std::string rtnData = n->GetData(); // the data to return
// un-hook the node from the linked list
pHead->SetNext(n->GetNext());
n->GetNext()->SetPrev(pHead);
n->SetNext(0);
n->SetPrev(0);
// delete the node
delete n;
n=0;
size--;
return rtnData;
}
LinkedListNode::~LinkedListNode()
{
}
(На самом деле вам даже не нужно сбрасывать указатель prev и next на 0, так как вы все равно собираетесь удалить узел. Я оставил эти операторы, потому что они по крайней мере переводят узел в согласованное состояние, которое является В общем, хорошая идея. Если вы позже, например, измените стратегию управления памятью и решите сохранить неиспользуемые узлы для последующего повторного использования, это может иметь значение.)