该参数可能是一个值,并且是在指针中找到的值的副本
此警告意味着此值不应位于当前上下文中。 在将 NULL 值作为自变量传递到不允许使用它的函数时,通常会显示此警告。 实际上,此值是在指定变量中找到的,而参数是该变量的副本。
在可明确确定指针为 NULL 或包含非法值的首个位置,代码分析工具将报告此警告。 但实际上错误往往会在跟踪中提前发生。 当发生这种情况时,代码分析工具也会给出第一个可能实例的行号(通常是在无法明确确定警告是否适当的位置)。 在这些情况下,会将此问题可能提前发生的位置附加到警告消息。 通常,代码的更改应发生在此行号或此行号之前,而不是报告的位置。
示例
在下面的示例中,代码分析工具确定 if 语句中的 s 是 NULL,因此采用 if 的主体。 然后,指针 s 被分配到 t,随后以一种可能发生 NULL 取消引用的方式使用 t。
#include <windows.h>
int fun2(char *s)
{
char *t;
if (s == NULL) {
//... but s is unchanged
}
t = s;
return lstrlenA(t);
}
在此代码示例中,代码分析工具将报告以下警告:
d:\sample\testfile.cpp(38) : warning C28183: 't' could be '0', and is a copy of the value found in 's': this does not adhere to the specification for the function 'lstrlenA'.: Lines: 31, 32, 36, 38