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/