当我使用free()释放malloced指针时,错误指针无效

时间:2017-06-20 14:53:06

标签: c pointers malloc free

在我的函数中使用它后,我无法释放此指针。 它给了我这个错误信息。该函数应检查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;
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:6)

仔细看看这两行:

wordTriePtr cursor=(wordTriePtr) malloc(sizeof(wordTrie));
cursor=root;

第一个定义变量cursor并初始化它以指向您分配的一些内存。

第二行重新分配变量,使其指向其他位置。

进一步向下循环

cursor = cursor->children[path]

再次重新分配

重新分配基本等同于

int a = 5;
a = 10;

然后想知道为什么a不等于5

我的猜测是您不应该致电mallocfree