Purify обнаружил потенциальное свободное чтение памяти при использовании std::list::remove()
Purify обнаружил потенциальное свободное чтение памяти при использовании std::list::remove(). Я заметил, что std::list::remove()
использует тип operator==
сделать сравнение. Однако я также заметил, что если первый элемент в списке передается std::list::remove()
, он удаляется при совпадении, но затем все равно используется для сравнения со всеми остальными элементами в списке. Это заставляет Purify пометить это как "потенциальное чтение свободной памяти". Я заменил std::list::remove()
позвонить с erase()
и итератор, который более эффективен, потому что он делает цикл только один раз против двух в моей ситуации.
Есть ли причина std::list::remove()
держит первый элемент вокруг?
1 ответ
Это была ошибка GCC# 17012, исправленная в 4.3.0. См. Также Отчет о дефектах рабочей группы библиотеки 526.