使用C ++已有很长时间了,非常感谢!
这是一个简单的LRU缓存演示,我打算使用true
来跟踪std::list<std::pair<int, int>>::iterator
中的数据项,但是似乎出了点问题,所以std::list
告诉我{{1} }警告。
-fsanitizer
错误
heap-use-after-free
答案 0 :(得分:2)
在SimpleLRU::get
中,由于key
中已经存在cache_
,因此呼叫cache_.emplace(key, list_.begin())
是空操作-它不会用新值替换现有值。结果,cache_
最终持有无效的迭代器。做吧
it->second = list_.begin();
SimpleLRU::put
中的类似问题,只是在这里,您并不总是拥有方便地访问现有地图元素的迭代器。处理此问题留给读者练习。