Sdílet prostřednictvím


C28183

upozornění C28183: argument může být jednou hodnotu, přičemž je kopií hodnoty nalezené v ukazateli

Toto upozornění znamená, že tato hodnota není v aktuálním kontextu očekávána.Toto upozornění se obvykle zobrazí, je-li předán argument s hodnotou NULL funkci, která to nepovoluje.Hodnota byla v zadané proměnné nalezena a argument je kopií této proměnné.

Nástroj Analýza kódu generuje toto upozornění ihned, kdy může s jistotou určit, že ukazatel obsahuje neplatnou hodnotu nebo hodnotu NULL.Často se však stává, že se chyba může v trasování vyskytnout i dříve.V takovém případě nástroj Analýza kódu podává informaci o číslu řádku první možné instance -- obvykle na umístění, kde nemohl s jistotou určit, že je upozornění příhodné.V těchto případech je ke zprávě upozornění přidáno umístěni, kde k tomuto může dojít.Obvykle by měl být kód změněn spíše než v bodě upozornění před nebo na daném řádku.

Příklad

V následujícím příkladu nástroj Analýza kódu určí, že v příkazu if nabývá proměnná s hodnoty NULL, a pokračuje tělem bloku if.Ukazatel s je poté přiřazen do proměnné t a proměnná t je použita způsobem, kde může dojít k odkázání hodnoty NULL.

#include <windows.h>

int fun2(char *s)
{
    char *t;
    if (s == NULL) {
       //... but s is unchanged 
    }

    t = s;

    return lstrlenA(t);
}

V tomto příkladu kódu nástroj Analýza kódu generuje následující upozornění: