我有以下代码:
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测试内存泄漏时,它表明我经常发生内存泄漏。
我知道我的析构函数有很多缺陷;会有什么问题?
提前谢谢!
答案 0 :(得分:0)
内存泄漏是由于您从未取消分配孩子造成的
(将指针设置为<px:PXLiteral runat="server" ID="s">
<script type="text/javascript" src="myscript.js"></script>
</px:PXLiteral>
是不够的。)
你的析构函数可以这么简单:
NULL
答案 1 :(得分:0)
内存泄漏的另一个原因也可能是递归生成或构建子节点。如果您更改结构中的子数据字段并以不同的方式管理它,例如在构造函数内部以某种方式进行管理或在外部链接子级和父级,则会更好。尝试它可能会让你的内存泄漏