Condividi tramite


Avviso C6269

Possibile ordine errato delle operazioni: dereferenziazione ignorata

Questo avviso indica che il risultato di una dereferenziazione del puntatore viene ignorato, che genera la questione del motivo per cui il puntatore viene dereferenziato in primo luogo.

Osservazioni:

Il compilatore ottimizza correttamente la dereferenziazione gratuita. In alcuni casi, tuttavia, questo difetto può riflettere una precedenza o un errore di logica.

Una causa comune di questo difetto è un'istruzione di espressione del formato:

*p++;

Se la finalità di questa istruzione consiste semplicemente nell'incrementare il puntatore p, la dereferenziazione non è necessaria; tuttavia, se la finalità consiste nell'incrementare la posizione a cui p punta, il programma non si comporta come previsto perché p++ il costrutto viene interpretato come (p++) anziché (*p)++.

Nome dell'analisi del codice: POINTER_DEREF_DISCARDED

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>

void f( int *p )
{
  // code ...
  if( p != NULL )
    *p++;
  // code ...
}

Per correggere questo avviso, usare le parentesi come illustrato nel codice seguente:

#include <windows.h>

void f( int *p )
{
  // code ...
  if( p != NULL )
    (*p)++;
  // code ...
}