삭제 및 소멸자에 문제가 있습니다. (나는 바보 같은 실수를 저 지르지 만, 아직 파악하지 못했습니다.)C++ 삭제가 작동하지 않습니까?
소멸자를 단계별로 실행하고 포인터에 대한 삭제를 호출하면 "주소의 메모리에 액세스 할 수 없습니다."라는 메시지가 나타납니다 (일부 주소는입니다).
관련 코드는 다음과 같습니다
/*
* 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 - wait, 당신이 말하는 것을 볼 수 있습니다. – vimalloc
@kyeana : 원하는 경우에만 제거중인 단일 노드와 연관된 메모리를 반환하십시오. –
그보다 더 나쁩니다. 실제로 목록의 끝까지 (첫 번째 삭제시 재귀) 전달을 삭제 한 다음 두 번째 마지막 노드를 삭제하려고 시도합니다 마지막 노드의 소멸자 내부에서 다시 충돌이 발생합니다. X, Y 및 Z가 마지막 세 노드 인 경우 ~ X는 Y를 삭제하고 Y는 ~ Z를 삭제하고 ~ Z는 Y를 다시 삭제합니다. –