n-ary树结构的析构函数

时间:2015-07-01 10:50:55

标签: c++ memory struct memory-leaks

我有以下代码:

const int MAXCHILD = 10;

struct Node {
    Node *child[10];

    Node();
    void deleteNode(Node *n);
    ~Node();
};

Node::Node() {
    for(int i=0; i<MAXCHILD; i++) {
        child[i] = NULL;
    }
}

void Node::deleteNode(Node *n) {
    if(n == NULL) {
        return;
    } else {
        for(int i=0; i<MAXCHILD; i++) {
            deleteNode(n->child[i]);
        }

        for(int i=0; i<MAXCHILD; i++) {
            n->child[i] = NULL;
        }
    }

    n = NULL;
}

Node::~Node() {
    Node *n = this;
    deleteNode(n);
}

int main() {
    Node *n = new Node();

    ...

    delete n;
    n = NULL;

    return 0;
}

这是我尝试过的 编译/测试时我没有遇到任何严重错误,但是当我用Valgrind测试内存泄漏时,它表明我经常发生内存泄漏。

我知道我的析构函数有很多缺陷;会有什么问题?
提前谢谢!

2 个答案:

答案 0 :(得分:0)

内存泄漏是由于您从未取消分配孩子造成的 (将指针设置为<px:PXLiteral runat="server" ID="s"> <script type="text/javascript" src="myscript.js"></script> </px:PXLiteral> 是不够的。)

你的析构函数可以这么简单:

NULL

答案 1 :(得分:0)

内存泄漏的另一个原因也可能是递归生成或构建子节点。如果您更改结构中的子数据字段并以不同的方式管理它,例如在构造函数内部以某种方式进行管理或在外部链接子级和父级,则会更好。尝试它可能会让你的内存泄漏