Udostępnij za pośrednictwem


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: