Compartir a través de


C28303

Advertencia C28303: Se encontrón un operador _Deref_ ambiguo en <anotación> para el parámetro de referencia de C++ <nombre de parámetro>

Esta advertencia es similar a la advertencia C28302 y se muestra cuando se utiliza un nivel adicional de _Deref_ en un parámetro.

SAL2 no requiere el uso de un nivel adicional de _Deref_ al trabajar con parámetros de referencia.Esta anotación en particular es ambigua respecto al nivel de desreferencia que se ha de anotar.Puede ser necesario utilizar _At_ para hacer referencia al objeto específico que se va a anotar.

Ejemplo

El código siguiente genera esta advertencia porque el uso de __deref_out_ecount(n) es ambiguo:

   void ref(__deref_out_ecount(n) int **&buff, int &n)

La anotación anterior se puede interpretar de cualquiera de las siguientes maneras:

  • una referencia a una matriz (de tamaño n) de punteros a enteros (interpretación SAL1)

  • una referencia a un puntero a una matriz (de tamaño n) enteros (interpretación SAL2)

Una de las siguientes puede corregir esta advertencia:

   void ref(_Out_writes_(n) int **&buff, int &n)
   // or
   _At_(*buff), _Out_writes(n)) void ref(int **&amp;buff, int &amp;n)