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í: