【发布时间】:2012-08-11 14:08:54
【问题描述】:
我安装了Cppcheck 工具对我的C++ 项目进行静态代码分析,感觉它的性能很差。例如,谁能告诉我为什么 Cppcheck 在以下代码中无法找到数组越界错误?
void f(int c) {
char *p = new char[10];
p[c] = 42;
}
void g() {
f(100);
}
有一个online demo 可以使用 Cppcheck 方便地检查此代码。它只是在第 4 行出现内存泄漏,没有潜在缓冲区溢出的迹象。
【问题讨论】:
-
我注意到您的问题已在 cppcheck 论坛上发布和评论。那里的评论似乎暗示这种类型的边界检查尚不支持。在那个论坛上进一步质疑这个问题可能会更好。
-
因为任何工具都无法找到所有错误,尤其是 cppcheck 不能完全解析和评估 c++,但包含许多只允许检测大多数本地错误的快捷方式。
-
描述工具检测错误所需的步骤。然后列举会出现误报的情况。然后试一试,想象开发人员坐下来权衡这些事情。
-
是的,当我尝试使用 cppcheck 时,我也不太满意。不过,当我有更多代码要检查时,可能会再试一次 :-) 无论哪种方式,您期望得到什么样的答案? cppcheck 不会简单地找到您的错误“因为它不检查特定的事物组合”。 cppcheck 开发人员可能能够解释他们是否只是忘记了那个案例,或者是否需要对 cppcheck 进行不止一行的更改,甚至对模块进行根本性更改,但事实仍然是它还没有完成。 “显而易见”是一个非常危险的词......软件有一个非常不同的“显而易见”概念:-)
标签: c++ code-analysis static-code-analysis cppcheck