gpt4 book ai didi

c - 我无法正确释放二叉树,我该如何调试它?

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:53 26 4
gpt4 key购买 nike

我有一个二叉树玩游戏来猜测用户的猜测。在我尝试释放二叉树之前,一切都很好。我用 valgrind 来检查,他们给了我这些:

==8205== Invalid read of size 8
==8205== at 0x400F0A: treePrint (in /home/mbax4nc2/COMP26120/ex6/pangolin)
==8205== by 0x400A14: main (in /home/mbax4nc2/COMP26120/ex6/pangolin)
==8205== Address 0x4c334a8 is 200 bytes inside a block of size 216 free'd
==8205== at 0x4A06430: free (vg_replace_malloc.c:446)
==8205== by 0x400DEE: freeTree (in /home/mbax4nc2/COMP26120/ex6/pangolin)
==8205== by 0x400A08: main (in /home/mbax4nc2/COMP26120/ex6/pangolin)

typedef struct node{
char name[100];
char question[100];
struct node *yes;
struct node *no;
}node;

void freeTree(node *root)
{ //Tree's root note is passed as argument
if (root == NULL)
{
return;
}

if (root->no != NULL)
{
freeTree(root->no);
root->no = NULL;
}

if (root->yes != NULL)
{
freeTree(root->yes);
root->yes = NULL;
}

free(root);

return;
}

我没有把我所有的程序都贴在这里,因为它真的是一个很长的版本。我的 free() 函数有什么问题?我该如何调试它?我不知道如何使用 valgrind 记录来修复我的程序。

最佳答案

调试动态内存管理:计算对 malloc()calloc()realloc(NULL, ...) 的所有调用和 strdup(),将它们相加,然后计算对 free() 的所有调用,不包括对 free(NULL) 的调用。如果您没有发现错误,则前者和后者的计数应匹配。

请注意:如果上述两个计数匹配,这意味着内存管理正确完成。

关于c - 我无法正确释放二叉树,我该如何调试它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com