C28183
Ostrzeżenie C28183: argument może być jedną wartością i jest kopią wartości znalezionej we wskaźniku
Ostrzeżenie to wskazuje, że wartość była nieoczekiwana w bieżącym kontekście.Ostrzeżenie to pojawia się zazwyczaj, gdy wartość NULL jest przekazywana jako argument do funkcji, która na to nie pozwala.Wartość została faktycznie znaleziona w określonej zmiennej, a argument jest kopią tej zmiennej.
Narzędzie analizy kodu raportuje to ostrzeżenie w pierwszym punkcie, w którym można ostatecznie ustalić, że wskaźnik jest pusty (NULL) lub zawiera niedozwoloną wartość.Jednakże, często zdarza się, że w rzeczywistości błąd mógł wystąpić w śladzie wcześniej.W takim przypadku, narzędzie analizy kodu poda również numer wiersza pierwszego możliwego wystąpienia – zazwyczaj, w lokalizacji, w której nie można było ostatecznie ustalić, że ostrzeżenie będzie właściwe.W tych przypadkach, wcześniejsza lokalizacja, w której mógł wystąpić błąd, jest dołączana do komunikatu ostrzegawczego.Zwykle, zmiana kodu powinna nastąpić przed lub w podanym numerze wiersza, a nie w miejscu raportu.
Przykład
W poniższym przykładzie, narzędzie analizy kodu ustaliło, że wskaźnik s jest pusty w instrukcji if i pobierane jest ciało instrukcji if.Wskaźnik s jest następnie przypisywany do t, a następnie t jest używane w sposób, w którym może nastąpić usunięcie odwołania NULL.
#include <windows.h>
int fun2(char *s)
{
char *t;
if (s == NULL) {
//... but s is unchanged
}
t = s;
return lstrlenA(t);
}
W tym kodzie przykładowym, narzędzie analizy kodu raportuje następujące ostrzeżenie: