Condividi tramite


C6384

avviso C6384: divisione di sizeof di un puntatore per un altro valore

L'avviso indica che un calcolo di dimensione potrebbe non essere corretto. Per calcolare il numero di elementi di una matrice, talvolta si divide la dimensione della matrice per la dimensione del primo elemento. Tuttavia, quando la matrice è un puntatore, il risultato è solitamente diverso da quello previsto.

Se il puntatore è un parametro di funzione e la dimensione del buffer non è stata passata, non è possibile calcolare il buffer massimo disponibile. Quando il puntatore è allocato localmente, è necessario utilizzare la dimensione usata nell'allocazione.

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, sizeof dest  / sizeof dest[0]); 
  }
}

Per risolvere il problema, passare la dimensione del buffer come indicato nel codice seguente:

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, SIZE);
  }
}

Per risolvere il problema utilizzando la funzione _tcsncpy_s delle stringhe protette, utilizzare il codice riportato di seguito.

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
   _tcsncpy_s(dest, SIZE, src, SIZE);
  }
} 

Vedere anche

Riferimenti

_mbsnbcpy_s, _mbsnbcpy_s_l

sizeof Operator