Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C valgrind显示内存泄漏。我怎么堵住漏洞?_C_Memory Leaks_Valgrind - Fatal编程技术网

C 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

我是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 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;
}