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.

2

Другие решения


По вопросам рекламы [email protected]