free(): invalid size 에러
조회수 1577회
class BinaryTreeNode {
public:
friend class BinaryTree;
~BinaryTreeNode() = default;
private:
BinaryTreeNode(int data) : left(nullptr), right(nullptr), data(data) {}
BinaryTreeNode* left;
BinaryTreeNode* right;
int data;
};
class BinaryTree {
public:
~BinaryTree() {
postOrderTravRecur(this->root, BinaryTree::deleteAllData);
}
BinaryTreeNode createTreeNode(const int data) {
auto* newNode = new BinaryTreeNode(data);
return *newNode;
}
void makeSubTree(BinaryTreeNode& parent, BinaryTreeNode& child, const int option) {
if (option == 1) {
parent.left = &child;
}
...
}
...
void BinaryTree::deleteAllData(const BinaryTreeNode* pNode) {
delete pNode; // !!
}
private:
BinaryTreeNode* root;
간단한 이진 트리 클래스를 만들어 보았습니다. BinaryTreeNode
객체를 여러 개 만들고, 이를 makeSubTree()
메소드에 인자로 넘겨서 하나씩 트리로 추가하는 방식입니다.
트리의 생성까지는 문제가 없는데, 노드 삭제 시 문제가 발생하네요. 루트 노드부터 후위 순회 방식으로 노드를 하나씩 지우려는데, delete pNode
문을 실행하면 free(): invalid size라는 에러 메시지가 뜹니다.
이 에러는 보통 동적 할당을 하지 않았는데 해제를 하려고 하면 발생하는 것으로 알고 있었는데요, 이 코드에서는 분명히 BinaryTreeNode
객체의 할당이 제대로 이루어졌는데 왜 이런 문제가 발생하는지 모르겠습니다.
전체 소스 코드: https://www.codepile.net/pile/k7D8yQ7P
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력