Ich bin ein Anfänger in C++. Ich habe diesen Code geschrieben, der eine modifizierte Version von Quadtrees erzeugt. . Wenn ich es laufen, ich habe die „Zugriffsverletzung Leseort“ Fehler angezeigt Ich habe zwei Klassen:"Zugriffsverletzung Leseort" Fehler auf C++
class TreeNode
{
public:
TreeNode *parent;
TreeNode *child[4];
int *id;
...
TreeNode(..., int *_id, ...): ..., id(_id),... {}
};
und:
class QuadTree
{
private:
...
TreeNode *root;
void tree_builder(TreeNode *&p,...);
public:
QuadTree(...);
~QuadTree() {delete_helper(root);}
};
tree_builder Funktion:
void QuadTree::tree_builder(TreeNode *&p, ...)
{
p = new TreeNode();
p->id = new int[2 * length];
...
}
delete_helper Funktion, das ist, wo ich den Fehler bekomme:
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;
}
}
Haupt:
int main()
{
QuadTree *tree;
tree = new QuadTree(length, xyseed);
...
delete tree;
...
return 0;
}
P.S. Sorry mein Code ist lang, ich habe versucht, es so kurz wie möglich zu machen!
Bitte geben Sie einen [MCVE] an. Ein kurzes Beispiel ist großartig, aber nur, wenn es immer noch den beschriebenen Fehler erzeugen kann. In Ihrem Beispiel gibt es nicht genügend Informationen, um auf die Ursache des Problems zu schließen. –
Was ist der Call-Stack der Ausnahme? –
Warum löschen Sie 'p-> id' viermal? –