使用free()释放malloced指针时出错无效指针

使用free()释放malloced指针时出错无效指针,c,pointers,malloc,free,C,Pointers,Malloc,Free,在函数中使用此指针后,无法释放它。 它给了我这个错误信息。函数应该检查trie字典中的单词拼写是否正确。root是第一个trie节点 “./拼写器”中出错:free():无效指针:0x00007fe53a80d848 下面是函数: bool check(const char *word) { int pos=0; int path; char wordChar=*(word+pos); wordTriePtr cursor=(wordTriePtr) malloc

在函数中使用此指针后,无法释放它。 它给了我这个错误信息。函数应该检查trie字典中的单词拼写是否正确。root是第一个trie节点

“./拼写器”中出错: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;
    }
}

我做错了什么?

仔细看看这两行:

wordTriePtr cursor=(wordTriePtr) malloc(sizeof(wordTrie));
cursor=root;
第一个定义变量
cursor
,并将其初始化为指向您分配的某些内存

第二行重新分配变量,使其指向其他地方

在循环的更深处

cursor = cursor->children[path]
这又重新分配了它

这些重新分配基本上相当于

int a = 5;
a = 10;
然后想知道为什么
a
不等于
5


我的猜测是,你根本不应该打电话给
malloc
free

仔细看看这两行:

wordTriePtr cursor=(wordTriePtr) malloc(sizeof(wordTrie));
cursor=root;
第一个定义变量
cursor
,并将其初始化为指向您分配的某些内存

第二行重新分配变量,使其指向其他地方

在循环的更深处

cursor = cursor->children[path]
这又重新分配了它

这些重新分配基本上相当于

int a = 5;
a = 10;
然后想知道为什么
a
不等于
5


我猜你根本不应该调用<代码> MalcC < /C>和<代码> Fuelue/Cuth>。< /P>这个问题有没有涉及C++的任何部分?如果不是,你应该删除C++标签。他正在铸造MALOC的结果,必须是C++初学者……在编程C时也有很多初学者。@ Someprogrammerdude,甚至一些专业人员……这个问题有没有涉及C++的任何部分?如果不是,你应该删除C++标签。他正在铸造MALOC的结果,必须是C++初学者……TMT。C编程时,很多初学者也会这么做。@ Someprogrammerdude,甚至一些专业人士…