【发布时间】:2020-05-28 15:01:24
【问题描述】:
我已经编写了一个基本函数,用于在 C 中递归地释放 trie 数据结构:
// Root pointer is passed as arg in initial call
void destroy(node *trav)
{
for (int i = 0; i < N; i++)
{
if (trav->children[i])
{
destroy(trav->children[i]);
}
}
free(trav);
}
这个函数似乎在任何较小的字典文件中都能正常工作。程序成功加载和卸载的最大文件包含 134,480 个单词。
但是,在释放较大的 trie 时会产生分段错误。导致分段错误的较大文件包含 506,915 个单词。
Valgrind 产生的错误信息指出:“Invalid read of size 8”后跟几个回溯,最后; “地址没有被堆栈、malloc 或(最近)释放”。
这可能是什么原因?
【问题讨论】:
标签: recursion memory memory-management segmentation-fault trie