Advertencia C28183

El argumento podría ser un valor y es una copia del valor encontrado en el puntero

Esta advertencia indica que este valor es inesperado en el contexto actual. Esta advertencia suele aparecer cuando se pasa un NULL valor como argumento a una función que no lo permite. El valor se encontró realmente en la variable especificada y el argumento es una copia de esa variable.

La herramienta Code Analysis notifica esta advertencia en el primer punto donde puede determinar definitivamente que el puntero es NULL o que contiene un valor no válido. Sin embargo, a menudo es el caso de que el error podría producirse anteriormente en el seguimiento. Cuando sucede, la herramienta Análisis de código también proporcionará el número de línea de la primera instancia posible, normalmente en una ubicación donde no pudo determinar definitivamente que la advertencia era adecuada. En esos casos, la ubicación anterior en la que se puede producir se anexa al mensaje de advertencia. Normalmente, se debe producir un cambio de código en ese número de línea o antes que en el punto del informe.

Ejemplo

En el ejemplo siguiente, la herramienta Code Analysis determina que s es NULL en la instrucción if y se toma el cuerpo de if. A continuación, el puntero s se asigna a t y, luego, se usa t de una manera en la que se podría producir una desreferencia de NULL.

#include <windows.h>

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

    t = s;

    return lstrlenA(t);
}

En este ejemplo de código, la herramienta Code Analysis notifica la siguiente advertencia:

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