c++ destroy_tree指针错误

C++ destroy_tree pointer error

本文关键字:指针 错误 tree destroy c++      更新时间:2023-10-16

我有一个在c++中删除树的destroy_tree函数的问题。编译器说*** glibc detected *** <path>: free(): invalid pointer: 0x00007f37590d3778 ***。下面是我的destroy_tree函数:

void Tree::destroy_tree(node** parent) {
if ( (*parent) != NULL ) {
    for (int i=0; i<NUM_ELEMS; i++) {
        destroy_tree( &((*parent)->leaves[i]) );
    }
    if ( (*parent)->zone_id != NULL ) {
        delete (*parent)->zone_id;
        (*parent)->zone_id = NULL;
    }
    delete (*parent);
    (*parent) = NULL;
}

结构如下:

struct node {
    int* zone_id;
    node* leaves [NUM_ELEMS];
    node() : leaves() {} //setting all leaves pointers to NULL
};

指针初始化(在其他函数中):

    (*parent)->leaves[value]->zone_id = new int;
    *((*parent)->leaves[value]->zone_id) = zone_id;

试一试。我认为这个"if"应该包括所有代码,而不仅仅是递归destroy_tree

void Tree::destroy_tree(node** parent) 
{
if ( (*parent) != NULL )  //I think this "if" should be include all code Not only recursion destroy_tree
  {
    for (int i=0; i<NUM_ELEMS; i++) 
    {enter code here
        destroy_tree( &((*parent)->leaves[i]));
    }
   if ( (*parent)->zone_id != NULL )   //the (*parent) should not be NULL
    {
        delete (*parent)->zone_id;
        (*parent)->zone_id = NULL;
    }
    delete (*parent);  //the (*parent) should not be NULL
    (*parent) = NULL;
    }
}

对不起,我的英语很差