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)
,如果我釋放內存,我不能訪問亞軍 - >下一步。 但GCC編譯器運行成功。爲什麼這個函數不會導致錯誤?
其實如果我改變自由刪除亞軍,它也是正確的。 我可以問問原因可能是空閒或刪除只是告訴你內存是否可用實際上沒有清除數據裏面,所以你也可以訪問Next。 我可以問一下如何改善它嗎?
其實如果我改變自由刪除亞軍,這也是正確的。 我可以問問原因可能是空閒或刪除只是告訴你內存是否可用實際上沒有清除數據裏面,所以你也可以訪問Next。 我可以問一下如何改善它嗎? – Hypnoz
@Hypnoz它不是'delete'或'free'的問題 - 它不會是編譯器錯誤。簡單的事實是你不應該試圖釋放未分配的內存。 – mathematician1975