Предупреждение 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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по