在以下代码中,已经检查了(1)中的nullptr
:
int msg;
struct x * var[2];
if ((var[0] = get_x()) == nullptr) { // (1)
return;
}
if (var[0]->data != 11) { // (2) <<< V595
msg = 1;
printf("msg1");
}
if (var[0] && var[0]->data == 12) { // (3) <<< V595
msg = 2;
return;
}
但我仍然得到error: V595
。为什么呢?
我同意在(3)中对nullptr
进行超额检查。
答案 0 :(得分:1)
Analyzer认为这段代码异常。首先,指针被引用,之后它被验证。即使它不能等于NULL,它看起来也很可疑。可能会使用或检查错误的变量。
因此可能使用了错误的变量,并且修正后的代码版本可能如下所示:
if (FOO->data != 11) {
msg = 1;
printf("msg1");
}
if (var[0] && var[0]->data == 12) {
msg = 2;
return;
}
或者,可能是条件不正确:
if (var[0]->data != 11) {
msg = 1;
printf("msg1");
}
if (FOO && var[0]->data == 12) {
msg = 2;
return;
}
无论如何,分析仪并不喜欢它,它会发出警告。要消除此类警告,请删除不必要的检查,这会使代码过载并使其他程序员和分析器混淆。在这种情况下,分析仪不会发出警告:
if ((var[0] = get_x()) == nullptr) {
return;
}
if (var[0]->data != 11) {
msg = 1;
printf("msg1");
}
if (var[0]->data == 12) {
msg = 2;
return;
}
如果您不想删除此项检查,请使用以下方法之一来取消警告: