void removeDuplicateWithHashtable(LinkedListElement<char> *head)
{
    LinkedListElement<char> *runner = head;
    LinkedListElement<char> *previous = nullptr;
    hash_map<char, bool> record;
    while (runner) {
        if (record.count(runner->Data) == 0) {
            pair<char, bool> item(runner->Data,true);
            record.insert(item);
        }else
        {
            free(runner);
            previous->Next = runner->Next;
        }
        previous=runner;
        runner=runner->Next;
    }
}

最初我以为会有错误。因为在free(runner)中,如果我释放内存,则无法访问Runner-> Next。
但是GCC编译器成功运行。

实际上,如果我自由更改删除运行器,那也是正确的。
我可以问一下原因可能是免费的还是删除,只是告诉您内存可用而实际上没有清除内部数据,因此您也可以访问下一步。
我能问一下如何改进吗?

最佳答案

这不是编译错误,但问题(不确定的行为)将在运行时显现出来。如果您选择在未分配的内存上调用free,则编译器不会阻止您。

关于c++ - 为什么此功能没有引起错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13740258/

10-11 19:40