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