【发布时间】:2017-12-21 02:43:51
【问题描述】:
我目前正在开发一个拼写检查器(对于那些知道它的人来说,每个 CS50s pset5)。我正在使用 TRIE 进行搜索,但现在无法卸载它。该函数在第一次尝试 free() 时失败。我的猜测是它试图释放指针而不是指针指向的内容,但我可能完全错了。
我的具体问题是:为什么free() 函数在这里失败? (错误:双重释放或损坏(输出):0x00000000006020c0 ***)
我对节点的定义:
typedef struct node
{
bool wordHere;
struct node* children[27];
}node;
我的卸载功能:
node* currentNodePtr = &root;
bool unload(void)
{
node* ptrArray[27] = {NULL};
for(int i = 0; i < 27; i++)
{
ptrArray[i] = currentNodePtr -> children[i];
}
free(currentNodePtr);
for(int c = 0; c < 27; c++)
{
if(ptrArray[c] != NULL)
{
currentNodePtr = ptrArray[c];
}
unload();
}
return 0;
}
【问题讨论】:
-
将
currentNodePtr设为unload的参数而不是全局变量会好很多。 -
不幸的是,我的任务不允许我这样做,但它会工作得更好,同意!谢谢!