Condividi tramite


C6269

avviso C6269: possibile ordine errato delle operazioni: dereferenziazione ignorata

L'avviso indica che il risultato di una dereferenziazione del puntatore è ignorato, pertanto ci si chiede perché la dereferenziazione del puntatore avvenga nella prima posizione.

Il compilatore ottimizzerà correttamente la dereferenziazione ingiustificata.In alcuni casi, tuttavia, l'errore può sottintendere un errore di precedenza o di logica.

Una causa diffusa per questo errore è un'istruzione di espressione nel formato:

*p++;

Se lo scopo di questa istruzione è semplicemente di incrementare il puntatore p, la dereferenziazione non è necessaria. Se lo scopo, invece, è di incrementare la posizione a cui fa riferimento p, il comportamento del programma non sarà quello previsto, in quanto il costrutto *p++ verrà interpretato come * (p++)anziché (*p)++.

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>

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

Per risolvere il problema, utilizzare le parentesi come riportato nel codice seguente:

#include <windows.h>

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