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.

Другие вопросы по тегам