저는 C++의 초보자입니다. Quadtrees의 수정 된 버전을 생성하는이 코드를 작성했습니다. .,C++에서 "액세스 위반 읽기 위치"오류가 발생했습니다.
void QuadTree::tree_builder(TreeNode *&p, ...)
{
p = new TreeNode();
p->id = new int[2 * length];
...
}
delete_helper 기능 :
class TreeNode
{
public:
TreeNode *parent;
TreeNode *child[4];
int *id;
...
TreeNode(..., int *_id, ...): ..., id(_id),... {}
};
과 :
class QuadTree
{
private:
...
TreeNode *root;
void tree_builder(TreeNode *&p,...);
public:
QuadTree(...);
~QuadTree() {delete_helper(root);}
};
tree_builder 기능 내가 그것을 실행하면, 나는 "액세스 위반 읽기 위치"오류가 나는 두 개의 클래스가 그것이 내가 오류를 얻는 곳입니다 :
void QuadTree::delete_helper(TreeNode *& p)
{
if (p != NULL)
{
for (int i = 0; i < 4; i++)
{
delete_helper(p->child[i]);
}
delete[] p->id;
delete p;
p = NULL;
}
}
주 :
int main()
{
QuadTree *tree;
tree = new QuadTree(length, xyseed);
...
delete tree;
...
return 0;
}
P.S. 죄송합니다. 코드가 길어서 가능한 한 짧게하려고했습니다.
[MCVE]를 제공해주십시오. 짧은 예제는 훌륭하지만 설명 된 오류가 계속 발생할 수있는 경우에만 가능합니다. 문제의 원인을 추론 할 수있는 정보가 부족합니다. –
예외의 호출 스택은 무엇입니까? –
'p-id '를 네 번 삭제하는 이유는 무엇입니까? –