Я новичок в valgrind, и я запустил его с кодом, который я написал для дерева квадрантов.
Я написал функцию, которая рекурсивно освобождает узлы от дерева дерева:
void destroyTree (Node* p)
{
if (!p) return;
for (size_t i = 0; i < 4; ++i)
destroyTree(p->child[i]);
free(p);
}
Я вызываю эту функцию в основной функции:
int main( int argc, char **argv ) {
Node *head;
// make the head node
head = makeNode( 0.0,0.0, 0 );
// make a tree
makeChildren( head );
makeChildren( head->child[0] );
makeChildren( head->child[1] );
makeChildren( head->child[2] );
makeChildren( head->child[3] );
// print the tree for Gnuplot
writeTree( head );
return 0;
//destroy tree
destroyTree (head);
return 0;
}
Когда я запускаю valgrind, это показывает, что я теряю часть памяти.
Структура:
struct qnode {
int level;
double xy[2];
struct qnode *child[4];
};
typedef struct qnode Node;
Я вызываю malloc в buildTree:
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;
}
Как мне остановить утечку?Что-то не так с моей функцией освобождения или это где-то еще?