I'm a beginner in C++. I have written this code that generates a modified version of Quadtrees. When I run it, I get the "access violation reading location” error. I have two classes:
class TreeNode
{
public:
TreeNode *parent;
TreeNode *child[4];
int *id;
...
TreeNode(..., int *_id, ...): ..., id(_id),... {}
};
and:
class QuadTree
{
private:
...
TreeNode *root;
void tree_builder(TreeNode *&p,...);
public:
QuadTree(...);
~QuadTree() {delete_helper(root);}
};
tree_builder function:
void QuadTree::tree_builder(TreeNode *&p, ...)
{
p = new TreeNode();
p->id = new int[2 * length];
...
}
delete_helper function, that's where I get the error:
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;
}
}
main:
int main()
{
QuadTree *tree;
tree = new QuadTree(length, xyseed);
...
delete tree;
...
return 0;
}
P.S. Sorry my code is long, I tried to make it as short as I can!
You're deleting p->id four times.
Another potential problem is deleting uninitialized children because the child array isn't initialized to 0s. Are you sure every node has four valid children?