PVS-Studio:即使检查指针也会生成警告 V595
PVS-Studio: warning V595 is generated even if pointer is checked
在下面的代码中已经检查了 (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
进行超额检查。
分析器认为这段代码异常。首先,指针被引用,然后被验证。即使不能等于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;
}
如果您不想删除此检查,请使用以下方法之一来禁止显示警告:
在下面的代码中已经检查了 (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
进行超额检查。
分析器认为这段代码异常。首先,指针被引用,然后被验证。即使不能等于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;
}
如果您不想删除此检查,请使用以下方法之一来禁止显示警告: