修复:问题在于递归而不是指针。当它通过每次递归返回时,它会将返回的 VAR 重置为旧的主树。通过制作一个全局 VAR 并在返回之前设置它然后使整个函数返回无效来修复。没有内存泄漏。
我正在尝试将 malloc 的指针地址传递给 main() 中的指针变量。
该代码在一定程度上起作用。它没有将指针地址从 FinalTree 传递回 main,而是创建了一个新副本,这意味着我无法释放()在 FinalTree()中 malloc 的内存。当我进行内存检查时,我留下了一些未释放的内存。
这是到目前为止的代码:
Tree* FinalTree(Forest** forest, int FinalFreq)
{
Tree* maintree = mktree(); //this function calls malloc and have to use it
Tree* tree1 = pick(*forest);
Tree* tree2 = pick(*forest);
maintree->frequency = tree1->frequency + tree2->frequency;
maintree->left = tree1;
maintree->right = tree2;
//Make sure forest isnt barren
if (maintree->frequency != FinalFreq)
{
plant(*forest, maintree);
FinalTree(forest, FinalFreq);
}
return maintree;
}
这是从 main() 调用的:
Tree* tfinal = FinalTree(&finit, header.checksum);
指针让我发疯。我错过了什么?