У меня проблема с удалением и деструктором (я уверен, что делаю глупую ошибку здесь, но пока не могу понять это).C++ delete не работает?
Когда я перехожу в деструктор и пытаюсь вызвать delete на указателе, появляется сообщение «Невозможно получить доступ к памяти по адресу с некоторым адресом».
Соответствующий код:
/*
* Removes the front item of the linked list and returns the value stored
* in that node.
*
* TODO - Throws an exception if the list is empty
*/
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);
// delete the node
delete n;
n=0;
size--;
return rtnData;
}
и
/*
* Destructor for a linked node.
*
* Deletes all the dynamically allocated memory, and sets those pointers to 0.
*/
LinkedListNode::~LinkedListNode()
{
delete pNext; // This is where the error pops up
delete pPrev;
pNext=0;
pPrev=0;
}
Следующий и предыдущие узлы, хранящиеся в текущем узле (каждый узел содержит некоторые строковые данные, а также указатель на следующий и предыдущие узлы в списке). Это желаемое поведение, так как мы не подключили этот узел из связанного списка и теперь хотим вернуть всю динамически выделенную память EDIT - подождите, я думаю, посмотрите, что вы говорите. – vimalloc
@kyeana: вы только хотите вернуть память, связанную с единственным узлом, который вы удаляете –
Это хуже, чем это - это фактически будет удалять вперед до конца списка (рекурсия при первом удалении), а затем попытаться удалить второй-последний узел снова изнутри деструктора последнего узла, что, вероятно, является причиной сбоя. Если X, Y и Z являются последними тремя узлами, ~ X удаляет Y, ~ Y удаляет Z, а ~ Z снова удаляет Y. –