为什么在编译期间会发生以下错误

时间:2011-03-08 04:58:27

标签: c cc

作为我的计划的一部分,我使用了以下代码:

///////////////
98:::printf("%d",abc->stv)
//////////////
100::if(abc)
//////////////

(产生了以下错误)

Possible null pointer dereference: abc - otherwise it is redundant to check if abc is null at line 100

2 个答案:

答案 0 :(得分:3)

if (abc)测试abc是否为空指针。

编译器警告您已经假定abc不是空指针(通过在第98行解除引用),这意味着

  • if (abc)测试是多余的(因为它永远不会是真的)或
  • 第98行的abc解除引用可能不正确,因为abc实际上可能为空。

答案 1 :(得分:2)

如果您测试abc,则对编译器意味着它可能为null。因此,像abc->stv中一样取消引用指针是一个可能的错误。解决方案是将printf代码括在if块中:

if(abc)
{
    printf("%d",abc->stv)
    ...
}