Mic*_*zek 8 c++ static-analysis exception parasoft control-flow
我们使用Parasoft C++测试来静态分析我们的代码.它有以下代码的问题:
void foo(int* x) {
try {
bar();
} catch(...) {
delete x;
throw;
}
*x;
}
Run Code Online (Sandbox Code Playgroud)
它警告*x;线:
在任何情况下都不应随后访问释放的内存
不知何故,它得出的结论是,控制流可以传递到catch(...)块中,删除x,经过throw;,并使其成为*x;.我试过throw std::exception("");和其他几个人一样,得到了同样的东西.Parasoft当然知道异常并将它们合并到其控制流中,因为还有许多其他测试涉及异常检查.难道仅仅是混淆在这种情况下,还是有一些实际的方式对这一计划击中双方的执行delete x;和*x;?
也许这是一个愚蠢的建议,但如果你把问题留到最后,Parasoft 会说什么?IE
void foo(int* x)
{
try
{
bar();
*x;
}
catch(...)
{
delete x;
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到这可能不适用于语句和异常的所有组合,例如,如果您有多个异常类型要在 foo 的不同阶段使用不同的处理来捕获,但如果您真的想要,它至少可以为您提供解决方法的开始摆脱警告。
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |