Je suis un débutant en C++. J'ai écrit ce code qui génère une version modifiée de Quadtrees. . Quand je lance, je reçois la « violation d'accès emplacement de lecture » erreur j'ai deux classes:Erreur de "violation d'accès de lecture d'accès" sur C++
class TreeNode
{
public:
TreeNode *parent;
TreeNode *child[4];
int *id;
...
TreeNode(..., int *_id, ...): ..., id(_id),... {}
};
et:
class QuadTree
{
private:
...
TreeNode *root;
void tree_builder(TreeNode *&p,...);
public:
QuadTree(...);
~QuadTree() {delete_helper(root);}
};
fonction tree_builder:
void QuadTree::tree_builder(TreeNode *&p, ...)
{
p = new TreeNode();
p->id = new int[2 * length];
...
}
fonction delete_helper, c'est là que j'obtiens l'erreur:
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;
}
}
principal:
int main()
{
QuadTree *tree;
tree = new QuadTree(length, xyseed);
...
delete tree;
...
return 0;
}
P.S. Désolé mon code est long, j'ai essayé de le rendre aussi court que possible!
Veuillez fournir un [MCVE]. Un petit exemple est génial, mais seulement s'il peut encore produire l'erreur décrite. Il n'y a pas assez d'informations dans votre exemple pour déduire la source du problème. –
Quelle est la pile d'appel de l'exception? –
Pourquoi supprimez-vous 'p-> id' quatre fois? –