Avviso C6384

Divisione delle dimensioni di un puntatore per un altro valore

Osservazioni:

Questo avviso indica che un calcolo delle dimensioni potrebbe non essere corretto. Per calcolare il numero di elementi in una matrice, a volte si divide la dimensione della matrice in base alle dimensioni del primo elemento. Tuttavia, quando la matrice è effettivamente un puntatore, il risultato è in genere diverso da quello previsto.

Se il puntatore è un parametro di funzione e le dimensioni del buffer non sono passate, non è possibile calcolare il buffer massimo disponibile. Quando il puntatore viene allocato in locale, è necessario usare le dimensioni usate nell'allocazione.

Nome dell'analisi del codice: DIVIDING_SIZEOF_POINTER

Esempio

Il codice seguente genera l'avviso C6384:

#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 correggere questo avviso, passare le dimensioni del buffer come illustrato 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 correggere questo avviso usando la funzione _tcsncpy_sstringa sicura , usare il codice seguente:

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

L'uso di new e delete presenta molte insidie in termini di perdite di memoria ed eccezioni. Per evitare completamente questi tipi di potenziali perdite, usare i meccanismi forniti dalla libreria standard C++ (STL). Sono inclusi shared_ptri contenitori , e , unique_ptrad esempio vector. Per altre informazioni, vedere Puntatori intelligenti e libreria standard C++.

Vedi anche

_mbsnbcpy_s, _mbsnbcpy_s_l
Operatore sizeof