C28183
Предупреждение C28183: Аргумент должен быть единственным значением, однако является копией значения, находящегося в указателе
Данное предупреждение указывает, что значение не подходит для текущего контекста.Это предупреждение обычно появляется, когда значение NULL передается в качестве аргумента функции, которая не допускает его.Фактически значение было найдено в заданной переменной, а аргумент является копией этой переменной.
Средство анализа кода выдает предупреждение на первом шаге, где можно определить, что указатель является NULL или содержит недопустимое значение.Однако, часто ошибка может возникать в трассировке раньше.Когда это происходит, средство анализа кода выдает номер строки первого возможного запроса — обычно в позиции, где невозможно определить, что предупреждение является уместным.В таких случаях предыдущая позиция, где это может произойти, добавляется к предупреждающему сообщению.Как правило, изменение кода скорее всего должно происходить на данной позиции или предыдущей позиции, а не в точке, указанной в отчета.
Пример
В следующем примере средство анализа кода определяет, что s равно NULL в операторе if и используется тело if.Указателю s затем присваивается значение t, а затем t используется там, где может произойти разыменованиеNULL.
#include <windows.h>
int fun2(char *s)
{
char *t;
if (s == NULL) {
//... but s is unchanged
}
t = s;
return lstrlenA(t);
}
Для этого примера кода, средство анализа кода сообщает следующее предупреждение: