0
void node::assign_childs()
{
    node *childs;
    childs = new node[8];
    .
    .
    .
    child_pointer = &childs[0];
}

我很难找到释放“child_pointer”内存的方法。“child_pointer”在结构“node”中定义,如下所示。

struct node{
    vect p;
    vect norm;
    float s;
    unsigned char r,g,b;
    int fac_c;
    vector<int> cfac;
    bool isParent;
    bool filled;

    struct node* child_pointer;

    node(vect, float , vect );
    ~node();

    void assign_childs();

};

使用 delete 来释放 child_pointer 似乎不起作用,我也尝试过 delete []。

我如何创建一个析构函数来从根节点递归释放所有 child_pointers?

(这是一个八叉树,所以当我释放一个节点时,该节点内的所有节点也会被释放)

如果我必须更改分配/定义 child_pointer 的方式以使其可以释放它。我该怎么做?使用 8 个指针的数组不是替代方法,因为它会占用大量内存。

这是我尝试过的析构函数。

node::~node(){
    if (child_pointer != NULL){
        delete [] child_pointer;
    }
}

这样做会使我的程序因分段错误而崩溃。

node *octree(...);
.
.
.
delete octree;
4

1 回答 1

3

只需在析构函数中添加以下内容:

delete[] child_pointer;

删除将调用孩子的析构函数,他们的删除将调用孩子的孩子的析构函数等。

仅显示如何使用 delete 和 delete[] :

int *foo = new int;
delete foo;

int *bar = new int[42];
delete[] bar;
于 2013-06-27T21:17:47.573 回答