Udostępnij za pośrednictwem


C28303

Ostrzeżenie C28303: Dla parametru odwołania C++ <parameter_name>, znaleziono niejednoznaczny operator _Deref_ dla <annotation>.

To ostrzeżenie jest podobne do ostrzegania C28302 i jest zgłaszane, gdy dodatkowy poziom _Deref_ jest wykorzystywany w parametrze.

SAL2 nie wymaga użycia dodatkowego poziomu _Deref_ podczas pracy z odwołaniami do parametru.Ta szczególna adnotacja jest niejednoznaczna, co do którego poziomu dereferencja ma być adnotowana.Może być konieczne użycie _At_, aby odwołać się do wskazanego adnotowanego obiektu.

Przykład

Poniższy kod generuje to ostrzeżenie, ponieważ wykorzystanie __deref_out_ecount(n) jest niejednoznaczne:

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

Powyższa adnotacja może być interpretowana jako albo:

  • Odwołanie do tablicy n wskaźników liczb całkowitych (interpretacja SAL1)

  • Odwołanie do wskaźnika do tablicy n liczb całkowitych tablica (interpretacja SAL2)

Ostrzeżenie można poprawić w jeden z następujących sposobów:

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