【发布时间】:2009-12-09 11:53:26
【问题描述】:
我正在检查静态代码分析工具Klocwork的结果。
它抱怨以下代码:
293 for( my_vector_typedef::iterator it( start_pos ); it != end_pos ; ++it ){
294 delete *it;
295 }
带有以下信息:
对象“it._M_current”在被释放后使用。对象 'it._M_current' 在第 294 行通过将参数 1 传递给函数 'delete' 释放后在第 293 行使用
我知道 STL 中的事物(尤其是迭代器)有时并不像它们看起来那样,所以我想了解发生了什么。故意提出愚蠢的问题 - '删除'是针对'it'指向的东西执行的,而不是'it'本身,那么为什么它会抱怨它与'++it'一起使用呢?不是被删了吗?
【问题讨论】:
-
静态分析并不完美。它可以错误地标记代码行为正确的程序中的错误。由于某些代码检查需要比其他代码更高的分析精度,因此不同检查之间误报的频率可能会有很大差异。
标签: c++ templates stl iterator