Я проверяю результаты из инструмента анализа статического кода Klocwork.STL iterator - почему инструмент анализа кода жалуется?
Он жалуется на следующий код:
293 for(my_vector_typedef::iterator it(start_pos); it != end_pos ; ++it){
294 delete *it;
295 }
со следующим сообщением:
Object 'it._M_current' используется после того, как он был освобожден. Объект 'it._M_current' был использован в строке 293 после освобождения путем передачи аргумента 1 функции 'delete' в строке 294
Я знаю, что вещи (особенно итераторы) в STL иногда не так, как они кажутся мне. хотел бы понять, что происходит. Целесообразно формулировать вопрос глупо - «delete» выполняется на том, что «он» указывает, а не «сам», поэтому почему он жалуется на то, что он используется с «++ it»? Это не то, что было удалено?
Статический анализ не является совершенным. Он может ошибочно отмечать ошибки в программе, где код ведет себя корректно. Поскольку некоторые проверки кода требуют большей точности анализа, чем другие, частота ложных срабатываний может сильно различаться между различными проверками. –