【发布时间】:2015-07-01 10:50:55
【问题描述】:
我有以下代码:
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 测试内存泄漏时,它表明我一直在制造内存泄漏。
我知道我的析构函数有很多缺陷;会有什么问题?
提前谢谢!
【问题讨论】:
-
您在
deleteNode()函数中缺少delete n;(不应为this完成)。 -
将您的孩子存储在
unique_ptrs 中。哦,然后调用delete来返回你完成的内存。 -
@πάνταῥεῖ
delete n;会出现在t = NULL;之后还是之前? -
@Yakk 抱歉,
unique_ptrs 是什么?我不熟悉他们。 -
@Haxify 看here
标签: c++ memory struct memory-leaks