Предупреждение C28183

Аргумент может быть одним значением и является копией значения, найденного в указателе.

Это предупреждение указывает, что это значение непредвиденное в текущем контексте. Это предупреждение обычно возникает, когда NULL значение передается в качестве аргумента функции, которая не разрешает ее. Значение было найдено в указанной переменной, и аргумент является копией этой переменной.

Средство анализа кода сообщает об этом предупреждении в первую точку, где она может окончательно определить, что указатель находится NULL или содержит недопустимое значение. Однако часто это случай, когда ошибка может произойти раньше в трассировке. Когда это происходит, средство анализа кода также даст номер строки первого возможного экземпляра, как правило, в расположении, где он не мог окончательно определить, что предупреждение было соответствующим. В таких случаях более раннее расположение, где оно может произойти, добавляется в предупреждение. Как правило, изменение кода должно происходить с этим номером строки или до этого номера строки, а не в точке отчета.

Пример

В следующем примере средство анализа кода определяет значение NULL в if инструкции, а текст if взят. Затем указатель назначается t, а затем t используется таким образом, где NULL может произойти разыменовка.

#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