我在某些代码上运行了cppcheck以查找可能的运行时错误。而且它报告与下面的情况可能的空指针引用:从cppcheck更好的例子C++可能的空指针解引用
for(int i = 0; i < N; i++)
{
Foo* x(ArrayOfObjsContainingFooPtr[i].FooPtr); // line 3
if(!x) // line 4
continue;
}
错误消息:
[C:\ file.cpp
Foo* x = ... //defined somewhere ... Foo* y(x); //possible null pointer dereference.
编辑:3] :(错误)可能的空 指针解除引用:x - 否则它 冗余以检查x是否为空 第4行
但我不明白这是可能的。
你可以发布一个更完整的例子吗?我怀疑存在导致这种情况的代码路径。请注意,静态代码分析工具并不完美,这可能是误报。 – 2010-12-17 20:08:45
更新的原始问题 – Glaeken 2010-12-17 20:27:25
这些例子都没有解引用x。 – 2010-12-17 22:17:48