Condividi tramite


Avviso C6384

Divisione delle dimensioni di un puntatore per un altro valore

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.

Osservazioni:

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