【发布时间】:2011-05-27 08:07:09
【问题描述】:
我对一些代码运行 cppcheck 以查找可能的运行时错误。它报告了一个可能的空指针取消引用,情况如下:
Foo* x = ... //defined somewhere
...
Foo* y(x); //possible null pointer dereference.
编辑:更好的例子
for( int i = 0; i < N; i++ )
{
Foo* x( ArrayOfObjsContainingFooPtr[i].FooPtr ); // line 3
if( !x ) // line 4
continue;
}
来自 cppcheck 的错误消息:
[C:\file.cpp:3]:(错误)可能为空 指针取消引用:x - 否则它 检查 x 是否为空是多余的 第 4 行
但我不明白这怎么可能。
【问题讨论】:
-
你能发布一个更完整的例子吗?我怀疑存在导致这种情况的代码路径。请注意,静态代码分析工具并不完美,这可能是误报。
-
这些例子都没有取消引用 x。
-
您的示例仍然不完整。你能发布最小的可编译代码吗?上面的代码可以导致空指针取消引用。
标签: c++ pointers dereference cppcheck