Avertissement C28183

L’argument peut être une valeur et est une copie de la valeur trouvée dans le pointeur

Cet avertissement indique que cette valeur est inattendue dans le contexte actuel. Cet avertissement s’affiche généralement lorsqu’une NULL valeur est passée en tant qu’argument à une fonction qui ne l’autorise pas. La valeur a été trouvée dans la variable spécifiée et l’argument est une copie de cette variable.

L’outil Analyse du code signale cet avertissement au premier point où il peut déterminer définitivement que le pointeur est NULL ou qu’il contient une valeur illégale. Toutefois, il est souvent possible que l’erreur se produise plus tôt dans la trace. Lorsque cela se produit, l’outil Analyse du code donne également le numéro de ligne de la première instance possible, généralement à un emplacement où il n’a pas pu déterminer définitivement que l’avertissement était approprié. Dans ces cas, l’emplacement précédent où il peut se produire est ajouté au message d’avertissement. En règle générale, une modification du code doit se produire à ou avant ce numéro de ligne, plutôt qu’au point de rapport.

Exemple

Dans l’exemple suivant, l’outil Analyse du code détermine que s’agit de NULL dans l’instruction if , et le corps du if code est pris. Les pointeurs sont ensuite affectés à t, puis t sont utilisés de manière à ce qu’une NULL déférence puisse se produire.

#include <windows.h>

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

    t = s;

    return lstrlenA(t);
}

Pour cet exemple de code, l’outil Analyse du code signale l’avertissement suivant :

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