在我的函数中使用它后,我无法释放此指针。 它给了我这个错误信息。该函数应检查trie字典,以确定单词拼写是对还是错。而root是第一个trie节点。
<。>`.speller'中的错误:free():指针无效:0x00007fe53a80d848
这是功能:
bool check(const char *word)
{
int pos=0;
int path;
char wordChar=*(word+pos);
wordTriePtr cursor=(wordTriePtr) malloc(sizeof(wordTrie));
cursor=root;
while(wordChar!='\0')
{
path=determinePath(wordChar);
if(cursor->children[path]==NULL)
{
free(cursor);
return false;
}
else
cursor = cursor->children[path];
wordChar=*(word+(++pos));
}
if(cursor->isThisWord==true)
{
free(cursor);
return true;
}
else
{
free(cursor);
return false;
}
}
我做错了什么?
答案 0 :(得分:6)
仔细看看这两行:
wordTriePtr cursor=(wordTriePtr) malloc(sizeof(wordTrie));
cursor=root;
第一个定义变量cursor
并初始化它以指向您分配的一些内存。
第二行重新分配变量,使其指向其他位置。
进一步向下循环
cursor = cursor->children[path]
再次重新分配 。
重新分配基本等同于
int a = 5;
a = 10;
然后想知道为什么a
不等于5
。
我的猜测是您不应该致电malloc
和free
。