C valgrind显示内存泄漏。我怎么堵住漏洞?
我是valgrind的新手,我用为四叉树编写的代码运行了它 我编写了一个递归地将节点从四叉树中释放的函数:C valgrind显示内存泄漏。我怎么堵住漏洞?,c,memory-leaks,valgrind,C,Memory Leaks,Valgrind,我是valgrind的新手,我用为四叉树编写的代码运行了它 我编写了一个递归地将节点从四叉树中释放的函数: void destroyTree (Node* p) { if (!p) return; for (size_t i = 0; i < 4; ++i) destroyTree(p->child[i]); free(p); } 当我运行valgrind时,它表明我失去了一些记忆 结构如下: struct qnode { int l
void destroyTree (Node* p)
{
if (!p) return;
for (size_t i = 0; i < 4; ++i)
destroyTree(p->child[i]);
free(p);
}
当我运行valgrind时,它表明我失去了一些记忆
结构如下:
struct qnode {
int level;
double xy[2];
struct qnode *child[4];
};
typedef struct qnode Node;
我在buildTree中调用malloc:
Node *makeNode( double x, double y, int level ) {
int i;
Node *node = (Node *)malloc(sizeof(Node));
node->level = level;
node->xy[0] = x;
node->xy[1] = y;
for( i=0;i<4;++i )
node->child[i] = NULL;
return node;
}
Node*makeNode(双x,双y,整数级){
int i;
Node*Node=(Node*)malloc(sizeof(Node));
节点->级别=级别;
节点->xy[0]=x;
节点->xy[1]=y;
对于(i=0;ichild[i]=NULL;
返回节点;
}
如何阻止泄漏?我的释放功能是否有问题,或者是在其他地方
好的,既然没有人发现这一点,
main
的末尾写着:
// print the tree for Gnuplot
writeTree( head );
return 0; // <----------- wooooot!
//destroy tree
destroyTree (head);
return 0;
}
//打印Gnuplot的树
书面记录(头);
返回0;//它表示“代码< >代码> MAKONODE 未被释放。您应该共享该函数。@ StutyTeLe:我添加了代码,在这里使用MaloC上面的代码,您在代码的中间使用<代码>返回0 /代码>,因此不调用Debug函数!请启用警告<代码> MaKeODE < /Cord>,您有一个成员变量C调用的xy
看起来是数组或指针。如何分配空间,同样,如何释放它?在释放节点之前,还必须首先释放其中的任何指针。@Jean Françoisfare我尝试删除返回0
,但没有任何区别如何启用编译器warnings?-Wall-Wextra-pedantic
。在这种情况下,令人惊讶的是它不起作用!!将返回0
放在destroyTree(head);
下面可以吗?是的。C99现在认为这是隐含的,但您可以保留它。
// print the tree for Gnuplot
writeTree( head );
return 0; // <----------- wooooot!
//destroy tree
destroyTree (head);
return 0;
}