편집 : 그래서 나는 바보이고 valgrind로 작업 할 때 업데이트 된 .cpp를 SSH하는 것을 잊어 버렸습니다. 어쨌든 새로운 변경 사항을 나타 내기 위해 아래 코드를 업데이트했습니다. 불행히도 나는 여전히 아래에있는 것들로 누출되는 일부 정보를 얻고 있으며, 내가하고있는 일은 어떤 정보가 여전히 제대로 삭제되지 않는 것을 의미하는 나무를 만드는 것이다.메모리 누수가 있기 때문에 내 소멸자가 트리의 모든 노드에 충돌하는 것처럼 보이지 않습니다. 무엇을 놓치고 있습니까?
여기 재귀 도우미를 호출하는 내 트리의 내 소멸자입니다.
struct Node {
NodeData* data; // pointer to data object
Node* left; // left subtree pointer
Node* right; // right subtree pointer
};
NODEDATA가 제대로 작동 자신의 소멸자가있는 별도의 객체 클래스입니다 :
//---------------------------- destructor --------------------------------
BinTree::~BinTree() {
makeEmptyHelper(root);
}
//---------------------------- makeEmptyHelper --------------------------------
void BinTree::makeEmptyHelper(Node*& current) {
if (current != NULL) {
makeEmptyHelper(current->left);
makeEmptyHelper(current->right);
delete current->data;
delete current;
current = NULL;
//delete current;
}
}
여기 내 노드 구조체이다.
어딘가에 데이터를 삭제 하시겠습니까? 나는 당신이 current-> data; 삭제를 주석 처리했다는 것을 의미한다. 아마도 노드의 소멸자가 그 일을합니다. 편집 :하지만 노드에는 소멸자가 없습니다. – drescherjm
깨달았습니다 업데이트 된 .cpp를 그냥 사용하지 않았기 때문에 바보입니다. 매번 같은 코드를 실행했기 때문에 주석 달기와 주석 처리에서 아무런 영향을주지 않는다고 생각했습니다 .- 주석 처리를 해제했습니다. 저것은 누수의 일부를 확실히 고쳤습니다. –