【发布时间】:2014-08-25 19:14:56
【问题描述】:
假设你有这样的代码:
int* a = (int*) malloc(20);
a[3]=2;
pid_t q = fork();
if(!q) {
char *a[5];
for (q=4; ;--q) {
if(q<0) break;
a[q]="q";
}
execve("q", a, NULL);
}
if(q) kill(q, 9);
free(a);
使用 gcc -Wall、clang -Wall 构建时不会发出任何警告,使用 cppcheck --enable=all 时不会发出任何警告。
Hovewer 忽略了检查 malloc、fork 和 execve 的错误返回值显然会导致问题。如何静态检查 C 源代码中的此类错误?
【问题讨论】:
-
我不认为你可以。这些是典型的运行时错误,
valgrind或许可以帮助您。 -
为什么不能?许多函数都有一个记录在案的返回值,以防出错。静态检查器可以验证在调用之后(或立即在也可用于检查器的下一个调用函数中)的返回值是否存在
if或?,如果没有则显示警告。 -
好吧,我想应该可以,但我从来没有听说过有什么工具可以做到。
-
也许你可以自己写!
-
@Al.Sal,最简单的方法是什么?一个clang插件?
标签: c error-handling static-analysis